将来,如果您在问题中包含完整的警告消息,这将很有帮助—它将包含发生问题的行:tmp/untitled.py:15: RuntimeWarning: overflow encountered in double_scalars
return (g-((densaire*g)/densparticula)-((mu*18.0*v)/(cc*densparticula* (D**2.00))))
当变量的大小超过可以表示的最大值时,Overflow出现。在本例中,double_scalars表示64位浮点,其最大值为:
^{pr2}$
所以表达式中有一个标量值:(g-((densaire*g)/densparticula)-((mu*18.0*v)/(cc*densparticula* (D**2.00))))
超过了~1.79e308。要找出哪一个,可以使用^{}在发生这种情况时引发FloatingPointError,然后捕捉它并启动Python debugger:...
with errstate(over='raise'):
try:
ret = (g-((densaire*g)/densparticula)-((mu*18.0*v)/(cc*densparticula* (D**2.00))))
except FloatingPointError:
import pdb
pdb.set_trace()
return ret
...
然后可以从调试器中检查此表达式各个部分的值。溢出似乎发生在:(mu*18.0*v)/(cc*densparticula* (D**2.00))
第一次出现警告时,(cc*densparticula* (D**2.00)的值为2.3210168586496022e-12,而(mu*18.0*v)的计算结果为-9.9984582297025182e+299。在
基本上你把一个很大的数除以一个很小的数,结果的大小超过了可以表示的最大值。这可能是您的数学问题,也可能是您对函数的输入没有合理地缩放。在