首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mpmath支持非常小的数字吗?(Python)

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

Stack Overflow用户
提问于 2020-05-29 01:42:47
回答 1查看 81关注 0票数 1

我正在尝试解决一个数值数学问题,为此我需要python来处理非常小的数字。为此,我安装了mpmath。

然而,它并不完全像预期的那样工作。Mpmath能够处理1e-300,但不能处理1e-400 (分别为10^300,但不能处理10^400)

在我的脑海里

代码语言:javascript
复制
from mpmath import mp
from mpmath import mpf

mp.dps = 500 

如果我键入

代码语言:javascript
复制
x = mpf(1e-300)
print(x)

我得到了一个千位数字,接近1e-300 (这就是我想要的)

但是,如果我现在键入

代码语言:javascript
复制
y = mpf(1e-400)
print(y)

我得到的结果是:0.0,这不是我想要的。

我试图提高小数精度(例如mp.dps = 3000),但没有帮助,在第二种情况下我仍然得到零。

有没有办法绕过这个问题,或者mpmath只是不能处理1e-400?

EN

回答 1

Stack Overflow用户

发布于 2020-05-29 02:02:45

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

浮点型双精度浮点数的范围为1e-300,可以将数字作为字符串1e+300.

  • Provide到
  • ,这样它就会对其进行转换,而不是传递

意思是更改为:

代码语言:javascript
复制
y = mpmath(1e-400) # 1e-400 becomes 0 as a 
                   # float due to limited
                   # doubles accuracy

至:

代码语言:javascript
复制
y = mpmath('1e-400')

测试

代码语言:javascript
复制
from mpmath import mp
from mpmath import mpf

mp.dps = 500 

y = mpf('1e-400')
for k in range(10):
  print(k*y)

输出

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62071119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档