如何修复此OverflowError?

时间:2013-06-03 20:05:56

标签: python python-3.x

我不断收到“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)

3 个答案:

答案 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还有sqrtpower等功能:http://docs.python.org/2/library/decimal.html