我正在尝试解决一个数值数学问题,为此我需要python来处理非常小的数字。为此,我安装了mpmath。
然而,它并不完全像预期的那样工作。Mpmath能够处理1e-300,但不能处理1e-400 (分别为10^300,但不能处理10^400)
在我的脑海里
from mpmath import mp
from mpmath import mpf
mp.dps = 500 如果我键入
x = mpf(1e-300)
print(x)我得到了一个千位数字,接近1e-300 (这就是我想要的)
但是,如果我现在键入
y = mpf(1e-400)
print(y)我得到的结果是:0.0,这不是我想要的。
我试图提高小数精度(例如mp.dps = 3000),但没有帮助,在第二种情况下我仍然得到零。
有没有办法绕过这个问题,或者mpmath只是不能处理1e-400?
发布于 2020-05-29 02:02:45
问题是你遇到了double floating point numbers的准确性问题
浮点型双精度浮点数的范围为1e-300,可以将数字作为字符串1e+300.
意思是更改为:
y = mpmath(1e-400) # 1e-400 becomes 0 as a
# float due to limited
# doubles accuracy至:
y = mpmath('1e-400')测试
from mpmath import mp
from mpmath import mpf
mp.dps = 500
y = mpf('1e-400')
for k in range(10):
print(k*y)输出
1.0e-400
2.0e-400
3.0e-400
4.0e-400
5.0e-400
6.0e-400
7.0e-400
8.0e-400
9.0e-400https://stackoverflow.com/questions/62071119
复制相似问题