Python中的数值结果超出范围
我是Python的初学者。我写了一个函数,它计算10^-15阶的数字 生成代码输出时,出现一个错误,显示“数值结果超出范围”。发生此错误的可能原因是什么 这是我的密码Python中的数值结果超出范围,python,Python,我是Python的初学者。我写了一个函数,它计算10^-15阶的数字 生成代码输出时,出现一个错误,显示“数值结果超出范围”。发生此错误的可能原因是什么 这是我的密码 import numpy as np import matplotlib.pyplot as plt T=4.32*10**19 i=input("Number of iterations ") h=T/i a=[0.01]*6000 t=[0.0]*6000 data = np.loadtxt('/home/user/t.txt
import numpy as np
import matplotlib.pyplot as plt
T=4.32*10**19
i=input("Number of iterations ")
h=T/i
a=[0.01]*6000
t=[0.0]*6000
data = np.loadtxt('/home/user/t.txt')
t=data[:]
def f (a):
if a!=0:
c=((0.75/a + 0.044/(a**2) + 0.74*(a**2))**0.5)
return c
else :
return 0
for n in range(0,5998):
k1=f ( a[n] );
k2=f ( a[n]+(h/2)*k1 );
k3=f ( a[n]+(h/2)*k2 );
k4=f ( a[n]+h*k3 );
a[n+1]=(a[n]+(h/6)*(k1 + 2*k2 + 2*k3 + k4))
fo=open("a_of_t.txt", "w")
for item in a:
fo.write("%e\n" % item)
fo.close()
plt.plot(t,a, 'k')
plt.show()
错误为
line 23, in <module>
k3=f ( a[n]+(h/2)*k2 );
line 15, in f
c=((0.75/a + 0.044/(a**2) + 0.74*(a**2))**0.5)
OverflowError: (34, 'Numerical result out of range')
第23行,在
k3=f(a[n]+(h/2)*k2);
第15行,在f中
c=((0.75/a+0.044/(a**2)+0.74*(a**2))**0.5)
溢出错误:(34,‘数值结果超出范围’)
Python小数存储为64位浮点,因此精度有限。10^-15不能用浮点数表示。考虑使用该模块。 < P> Python小数被存储为64位浮点,因此,具有有限的精度。10^-15不能用浮点数表示。请考虑使用该模块。请显示您的代码和您正在获取的特定错误消息(堆栈跟踪)。在某个数量级上,浮动将停止工作,但我忘记了在哪里。也许decimal
会引起你的兴趣?它类似于[link]()我添加了编码,你能写出整个错误吗?它会告诉你计算机在哪里出错。请显示你的代码和你收到的特定错误消息(堆栈跟踪)。在某个数量级,浮点将停止工作,但我忘了在哪里。也许decimal
会引起你的兴趣?它类似于[link]()我添加了编码,你能写出整个错误吗?它告诉你电脑在哪里使用双精度浮点运算(64位浮点运算),其大小范围大约为1e308到1e-308,足以满足OP规定的1e-15范围。@James你能建议我如何在这段代码中加入十进制模块吗?我不明白。@user40330只需通过执行Decimal(var)
将所有变量转换为Decimal
。例如,T=Decimal(4.32*10**19)
,i=Decimal(输入(“迭代次数”)
。如果你想在结尾使用一个float
,只需使用float(someDecimal)
@James谢谢!这有助于Python使用双精度(64位浮点),其大小范围大约为1e308到1e-308,足以满足OP规定的1e-15范围。@James,你能建议我如何在这段代码中加入十进制模块吗?我不明白。@user40330只需通过执行Decimal(var)
将所有变量转换为Decimal
。例如,T=Decimal(4.32*10**19)
,i=Decimal(输入(“迭代次数”)
。如果你想在结尾使用一个float
,只需使用float(someDecimal)
@James谢谢!那有帮助