[英]Why is double 0.1 more accurate than its long double version?
我如何理解另一個浮點悖論 --- 0.1 表示為 double 比 0.1 表示為 long double 更准確?
In [134]: np.double(0.1)
Out[134]: 0.1
In [135]: np.longdouble(0.1)
Out[135]: 0.10000000000000000555
這不是更准確。 longdouble repr 只是向您展示了更多已經存在的不准確性。
0.1
是一個 Python 浮點數,與numpy.double
具有相同的精度。 它不代表精確的十進制值 0.1,因為二進制不能以有限位數表示該值。 0.1
代表這個值:
>>> import decimal
>>> decimal.Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
這是可以在類型精度限制內表示的最接近 0.1 的值。
當您從0.1
構造numpy.double
或numpy.longdouble
時,這就是您得到的值。 對於numpy.longdouble
,這不是類型可以存儲的 0.1 的最佳近似值。
numpy.double
和numpy.longdouble
的repr
顯示了生成 output 所需的最小十進制位數,如果轉換回原始類型,它將重現原始值。 對於numpy.double
,這只是"0.1"
,因為0.1
已經是最接近 0.1 的雙精度浮點值。 對於numpy.longdouble
,它需要更多的數字,因為numpy.longdouble
具有更高的精度,因此它可以表示更接近 0.1 的值而不是0.1
。
如果您想要 0.1 的最佳長雙精度近似值,您應該傳遞一個字符串而不是 Python 浮點數:
numpy.longdouble('0.1')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.