((gamma-(gamma**2-omega**2)**0.5)*(gamma+(gamma**2-omega**2)**0.5)).simplify()
输出结果为: gamma^2 - (gamma^2 -omega^2)^{1.0} $
然而,我预期的结果应该是omega^2。我知道在sympy文档中,它警告要小心处理浮点数,但我认为整数和2的分数次幂(可以精确表示)是可以的。
以下代码正确地重现了omega^2:
((gamma-(gamma**2-omega**2)**sym.Rational(1,2))*(gamma+(gamma**2-omega**2)**sym.Rational(1,2))).simplify()
为什么第一段代码没有产生预期的结果?
nsimplify
函数。如果我理解正确,Python 可以准确地表示 0.5,但 "不正确的答案" 是 SymPy 对浮点数预期行为的结果。 - Idieh0.5
或1.0
这样的特定数字是否可以准确地表示为浮点数。每个浮点数都可以准确地表示为浮点数,但如果它来自浮点运算,则其值可能不是这些运算的真正精确结果。 - Oscar Benjamin