首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mpmath和精度问题

mpmath和精度问题
EN

Stack Overflow用户
提问于 2019-04-27 20:10:02
回答 2查看 244关注 0票数 0

mpmath.sqrt(2)的精度不是我所期望的。我做错了什么?

代码语言:javascript
复制
import mpmath as mp

mp.prec = 20

mp.nprint(mp.sqrt(2), 20)

结果:1.4142135623730951455

预期:1.4142135623730950488 (根据this reference)

EN

回答 2

Stack Overflow用户

发布于 2019-04-27 20:37:56

有趣的案例。使用pythons Decimal可以得到与您列出的引用相同的结果,但使用floatmath.sqrt()似乎会得到不同的结果。

代码语言:javascript
复制
>>> from decimal import Decimal
>>> '{:.25f}'.format(2**0.5)                            # Result 1
'1.4142135623730951454746219'
>>> '{:.25f}'.format(math.sqrt(2))                      # Result 1
'1.4142135623730951454746219'
>>> '{:.25f}'.format(math.sqrt(Decimal('2')))           # Result 1
'1.4142135623730951454746219'
>>> '{:.25f}'.format(Decimal('2') ** Decimal('0.5'))    # Result 2
'1.4142135623730950488016887'

# The reference you listed                              # Result 2
'1.4142135623730950488016887'

您的库可能正在内部使用float

但我认为这是正常的,而不是错误,因为float并不意味着100%精确;它们意味着机器上的速度很快。

票数 0
EN

Stack Overflow用户

发布于 2020-01-27 01:29:50

mp.prec是二进制精度。mp.dps是十进制数。

代码语言:javascript
复制
In [588]: mpmath.mp.dps=20                                                                       
In [589]: mpmath.sqrt(2)                                                                         
Out[589]: mpf('1.4142135623730950488011')

使用此设置:

代码语言:javascript
复制
In [590]: print(mpmath.mp)                                                                       
Mpmath settings:
  mp.prec = 70                [default: 53]
  mp.dps = 20                 [default: 15]
  mp.trap_complex = False     [default: False]

cf默认情况下

代码语言:javascript
复制
Mpmath settings:
  mp.prec = 53                [default: 53]
  mp.dps = 15                 [default: 15]
  mp.trap_complex = False     [default: False]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55880416

复制
相关文章

相似问题

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