mpmath.sqrt(2) 的精度不是我所期望的。我究竟做错了什么?
import mpmath as mp
mp.prec = 20
mp.nprint(mp.sqrt(2), 20)
结果: 1.4142135623730951455
预期:(1.4142135623730950488
根据此参考)
有趣的案例。使用 pythonsDecimal
它给出的结果与您列出的参考相同,但使用float
ormath.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
内部使用。
但我认为这是正常的,而不是错误,因为float
s 并不意味着 100% 精确;它们应该在机器上运行得很快。
mp.prec
是二进制精度。 mp.dps
是十进制的。
In [588]: mpmath.mp.dps=20
In [589]: mpmath.sqrt(2)
Out[589]: mpf('1.4142135623730950488011')
使用此设置:
In [590]: print(mpmath.mp)
Mpmath settings:
mp.prec = 70 [default: 53]
mp.dps = 20 [default: 15]
mp.trap_complex = False [default: False]
cf 默认
Mpmath settings:
mp.prec = 53 [default: 53]
mp.dps = 15 [default: 15]
mp.trap_complex = False [default: False]