首页 > 解决方案 > mpmath 和精度问题

问题描述

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

import mpmath as mp

mp.prec = 20

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

结果: 1.4142135623730951455

预期:(1.4142135623730950488根据此参考

标签: pythonmpmath

解决方案


有趣的案例。使用 pythonsDecimal它给出的结果与您列出的参考相同,但使用floatormath.sqrt()似乎给出不同的结果。

>>> 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内部使用。

但我认为这是正常的,而不是错误,因为floats 并不意味着 100% 精确;它们应该在机器上运行得很快。


推荐阅读