首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二次求解器中的舍入误差

二次求解器中的舍入误差
EN

Stack Overflow用户
提问于 2012-12-29 00:55:06
回答 5查看 2.3K关注 0票数 0

我是python的新手,正在尝试编写一些代码来求解给定的二次函数。在浮点数中,我遇到了一些舍入误差的问题,我想是因为我将两个非常大的数字相除,而两个数字的差值非常小。(我还假设现在所有的输入都有真正的解决方案。)我放了两个不同版本的二次方程来说明我的问题。它适用于大多数输入,但当我尝试a = .001b = 1000c = .001时,我得到了两个有显著差异的答案。下面是我的代码:

代码语言:javascript
运行
复制
from math import sqrt

a = float(input("Enter a: "))
b = float(input("Enter b: "))
c = float(input("Enter c: "))

xp = (-b+sqrt(b**2-4*a*c))/(2*a)
xn = (-b-sqrt(b**2-4*a*c))/(2*a)

print("The solutions are: x = ",xn,", ",xp,sep = '')

xp = (2*c)/(-b-sqrt(b**2-4*a*c))
xn = (2*c)/(-b+sqrt(b**2-4*a*c))

print("The solutions are: x = ",xn,", ",xp,sep = '')
EN

回答 5

Stack Overflow用户

发布于 2012-12-29 01:00:37

我不是数学领域的专家,但我相信你应该使用numpy (一个用于数学的py模块),因为在计算机上的内部数字表示法,你的微积分不会与真正的数学相匹配。(浮点算术)

http://docs.python.org/2/tutorial/floatingpoint.html

检查一下,这几乎就是你想要的。

http://www.annigeri.in/2012/02/python-class-for-quadratic-equations.html

票数 1
EN

Stack Overflow用户

发布于 2012-12-29 01:06:39

若要使用浮点数获得更精确的结果,请注意不要减去相似的量。对于二次x^2 + a x + b = 0,您知道根x1x2使得

代码语言:javascript
运行
复制
b = x1 * x2

计算绝对值较大的一个,并从这个关系中得到另一个。

票数 1
EN

Stack Overflow用户

发布于 2012-12-29 01:25:34

解决方案:

用户dhunter建议的python 通常是Python语言中数学的最佳解决方案。numpy库能够在许多不同的领域中进行快速而准确的数学运算。

在Python2.4中添加了十进制数据类型如果你不想下载外部库,也不想做很多冗长或复杂的方程式,十进制数据类型可以满足你的要求。只需添加:

代码语言:javascript
运行
复制
from decimal import *

添加到代码的顶部,然后将单词float的所有实例替换为单词Decimal (请注意大写字母“D”)。

例如:与float(1.1047262519)相对的是Decimal(1.1047262519)

理论:

浮点运算基于二进制数学,因此并不总是用户所期望的那样。对float Vs的出色描述。decimal类型位于Here

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

https://stackoverflow.com/questions/14072921

复制
相关文章

相似问题

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