mpmath支持非常小的数字吗?(Python)

2024-06-07 14:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解决一个数字数学问题,为此我需要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


Tags: fromimport情况精度数字数学mpprint
1条回答
网友
1楼 · 发布于 2024-06-07 14:38:31

问题是你遇到了double floating point numbers的准确性

  • 双打的范围为1e-300至1e+300
  • 将数字作为字符串提供给mpmath,以便它转换它,而不是传递浮点

含义从:

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-400

相关问题 更多 >

    热门问题