我不断收到“OverflowError:数学范围错误”。无论我输入什么,结果都是一样的。我正在运行Python 3.3,它在最后一行找到了问题。我该如何解决? (另外,我不想听到有关我过度使用括号的任何信息。我希望有这么多。):
import math
a=float(input('a=?'))
b=float(input('b=?'))
c=float(input('c=?'))
d=float(input('d=?'))
critical_point_n=((-2*b)-math.sqrt(abs((4*(math.pow(b, 2)))-(12*a*c))))/(6*a)
first_root=critical_point_n-1
if first_root==0 and c==0:
first_root+=(-0.01)
for x in range(10):
first_root=first_root-((a*(math.pow(first_root, 3)))+(b*(math.pow(first_root, 2))+(c*first_root)+d)/(3*(a*(math.pow(first_root, 2))))+(2*(b*first_root))+c)
答案 0 :(得分:2)
你正在溢出float
s的内部表示。使用sys.float_info
检查系统对浮点数的限制。 http://docs.python.org/3.3/library/sys.html#sys.float_info
我建议您在wolframalpha上“手动”尝试操作,以查看实际值的大小。 http://www.wolframalpha.com/
答案 1 :(得分:2)
我知道你不想听到你过度使用括号,但问题是你的括号在错误的地方。由于您使用了大量的括号,因此需要一段时间才能找到问题。
我认为以下代码更清晰,更易于调试,并且将来更容易维护。我还包括了我认为是你的单行的修正版本。
import math
a=float(input('a=?'))
b=float(input('b=?'))
c=float(input('c=?'))
d=float(input('d=?'))
critical_point_n=((-2*b)-math.sqrt(abs((4*(math.pow(b, 2)))-(12*a*c))))/(6*a)
first_root=critical_point_n-1
if first_root==0 and c==0:
first_root+=(-0.01)
for x in range(10):
f = a*first_root**3 + b*first_root**2 + c*first_root + d
fp = 3*a*first_root**2 + 2*b*first_root + c
first_root = first_root - (f/fp)
#first_root=first_root-(((a*(math.pow(first_root, 3)))+(b*(math.pow(first_root, 2))+(c*first_root)+d)))/((3*(a*(math.pow(first_root, 2))))+(2*(b*first_root))+c)
print(first_root)
答案 2 :(得分:1)
math
范围的函数适用于doubles
...所以你超出范围 - 重写为普通的Python浮点数,可根据需要进行扩展,或者查看使用decimal.Decimal
还有sqrt
,power
等功能:http://docs.python.org/2/library/decimal.html