当我在这里结束时,我试图写基本相同的问题。但是我发现了一些这里没有提到的想法。首先,我同意@nelshh 的观点,即在某些特定情况下,您可以找到允许测试表达式相等性的规范形式。
我发现了一些规范形式的例子:
- 最著名的可能是布尔代数中的最小项规范形式,例如用于电路综合或验证。
- 多项式表达式也承认作为单项式之和的规范形式。这可以解决您的示例:
- 有理数的规范形式是不可约分数。
你的例子:
- 两者都已经是规范形式,您只需要通过增加程度对它们进行排序。
2*x
是其规范形式,x+x
不是(因为加法的两个操作数具有相同的度数)。
- 两者都已经是规范形式(-1 次的单项式),除了其中的系数
4/(x/2)
不是4/(1/2)
有理数的规范形式。
如果您仍然对此感兴趣,我建议您尝试使用计算机代数系统,例如 python 的 sympy(它可能也存在于 java 中)。但是,我也认为您应该删除标签java
和floating-point
(它与计算机如何存储实数无关),并添加标签computer-science
。
例如 sympy 能够告诉这样的事情:
>>> Rational(3,4)*(x+y)**2
2
3⋅(x + y)
──────────
4
>>> Rational(3,4)*(x**2+y**2)+Rational(1,4)*2*x*y+Rational(4,8)*2*x*y
2 2
3⋅x 3⋅x⋅y 3⋅y
──── + ───── + ────
4 2 4
>>> expand(Rational(3,4)*(x+y)**2)==expand(Rational(3,4)*(x**2+y**2)+Rational(1,4)*2*x*y+Rational(4,8)*2*x*y)
True