首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么使用python中的二次公式计算根时会产生无穷大的误差?

为什么使用python中的二次公式计算根时会产生无穷大的误差?
EN

Stack Overflow用户
提问于 2022-01-26 16:35:37
回答 1查看 73关注 0票数 0

我用python用两个不同的等价数学方程来求解二次公式。使用公式-b +- sqrt(b^2-4ac)/2a,我得到与wolfram匹配的结果。但是当我使用一个等价的公式2c/(-b -+ sqrt(b^2-4ac)时,我会得到一个无穷大的误差。为什么这种情况会发生在蟒蛇身上?

代码语言:javascript
运行
复制
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)
代码语言:javascript
运行
复制
0.0

-4.583333333333333e+17

-1.8181818181818182e-05

inf
EN

回答 1

Stack Overflow用户

发布于 2022-01-26 19:12:56

如果你想消除任何机器精度误差,我发现在这两种情况下,无论二次公式的a,b,c的值如何,使用taylor级数展开的二次公式都会给出正确的答案。

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70866985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档