我用python用两个不同的等价数学方程来求解二次公式。使用公式-b +- sqrt(b^2-4ac)/2a,我得到与wolfram匹配的结果。但是当我使用一个等价的公式2c/(-b -+ sqrt(b^2-4ac)时,我会得到一个无穷大的误差。为什么这种情况会发生在蟒蛇身上?
import numpy as np
a,b,c = 1.2*10**(-17), 5.5, 10**(-4)
x = (-b+np.sqrt(b**2-4*a*c))/(2*a)
print(x)
x = (-b-np.sqrt(b**2-4*a*c))/(2*a)
print(x)
x = 2*c/(-b - np.sqrt(b**2 - 4*a*c))
print(x)
x = 2*c/(-b + np.sqrt(b**2 - 4*a*c))
print(x)0.0
-4.583333333333333e+17
-1.8181818181818182e-05
inf发布于 2022-01-26 19:12:56
如果你想消除任何机器精度误差,我发现在这两种情况下,无论二次公式的a,b,c的值如何,使用taylor级数展开的二次公式都会给出正确的答案。
a,b,c = 1.2*10**(-17), 5.5, 10**(-4)
x = 2*c/(-b + b-2*a*c/b)
print(x)
x = 2*c/(-b-b-2*a*c/b)
print(x)
x = (-b -b -2*a*c/b)/(2*a)
print(x)
x = (-b + b - 2*a*c/b)/(2*a)
print(x)-4.583333333333333e+17
-1.81818181818181818182 e-05
-4.583333333333333e+17
-1.81818181818181818182 e-05
https://stackoverflow.com/questions/70866985
复制相似问题