Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的数值结果超出范围_Python - Fatal编程技术网

Python中的数值结果超出范围

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

我是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')
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谢谢!那有帮助