我是python的新手,正在尝试编写一些代码来求解给定的二次函数。在浮点数中,我遇到了一些舍入误差的问题,我想是因为我将两个非常大的数字相除,而两个数字的差值非常小。(我还假设现在所有的输入都有真正的解决方案。)我放了两个不同版本的二次方程来说明我的问题。它适用于大多数输入,但当我尝试a = .001
,b = 1000
,c = .001
时,我得到了两个有显著差异的答案。下面是我的代码:
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 = '')
发布于 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
发布于 2012-12-29 01:06:39
若要使用浮点数获得更精确的结果,请注意不要减去相似的量。对于二次x^2 + a x + b = 0
,您知道根x1
和x2
使得
b = x1 * x2
计算绝对值较大的一个,并从这个关系中得到另一个。
发布于 2012-12-29 01:25:34
解决方案:
用户dhunter建议的python 通常是Python语言中数学的最佳解决方案。numpy库能够在许多不同的领域中进行快速而准确的数学运算。
在Python2.4中添加了十进制数据类型如果你不想下载外部库,也不想做很多冗长或复杂的方程式,十进制数据类型可以满足你的要求。只需添加:
from decimal import *
添加到代码的顶部,然后将单词float的所有实例替换为单词Decimal (请注意大写字母“D”)。
例如:与float(1.1047262519)
相对的是Decimal(1.1047262519)
理论:
浮点运算基于二进制数学,因此并不总是用户所期望的那样。对float Vs的出色描述。decimal类型位于Here
https://stackoverflow.com/questions/14072921
复制相似问题