簡體   English   中英

為什么 double 0.1 比它的 long double 版本更准確?

[英]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.doublenumpy.longdouble時,這就是您得到的值。 對於numpy.longdouble ,這不是類型可以存儲的 0.1 的最佳近似值。

numpy.doublenumpy.longdoublerepr顯示了生成 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM