mpmath.sqrt(2)的精度不是我所期望的。我做错了什么?
import mpmath as mp
mp.prec = 20
mp.nprint(mp.sqrt(2), 20)结果:1.4142135623730951455
预期:1.4142135623730950488 (根据this reference)
发布于 2019-04-27 20:37:56
有趣的案例。使用pythons Decimal可以得到与您列出的引用相同的结果,但使用float或math.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并不意味着100%精确;它们意味着机器上的速度很快。
发布于 2020-01-27 01:29:50
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]https://stackoverflow.com/questions/55880416
复制相似问题