-2

我不断收到“溢出错误:数学范围错误”。无论我输入什么,结果都是一样的。我正在运行 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)
4

3 回答 3

2

您正在溢出 s 的内部表示float。用于sys.float_info检查系统对浮点数的限制。http://docs.python.org/3.3/library/sys.html#sys.float_info

我建议在 wolframalpha 上“手动”尝试您的操作,以查看实际值的大小。http://www.wolframalpha.com/

于 2013-06-03T20:31:50.997 回答
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)
于 2013-06-04T04:39:39.787 回答
1

函数的math范围工作doubles......所以你超出了范围 - 重写为正常的 Python 浮点数,它将根据需要进行扩展,或者查看使用decimal.Decimalwhich also hassqrtpower。函数:http:// docs.python.org/2/library/decimal.html

于 2013-06-03T20:10:19.010 回答