簡體   English   中英

Python 是否使用“chop”而不是“nearest number”四舍五入?

[英]Does Python use "chop" instead of "nearest number" rounding?

我的印象是 Python 使用雙精度算術,“最接近”舍入。 但是,請考慮以下事項:

在雙精度系統中, 1.0之后的下一個數字是1.00...01 = 1 + 2**(-52) 現在,如果 Python 使用“最接近”舍入,則數字1 + 2**(-53)應該舍入為1 + 2**(-52) 然而,事實證明1 + 2**(-53) == 1 如果 Python 使用“chop”舍入規則,這將是有道理的,但我的印象是沒有人使用它,因為它會使計算偏向於較低的結果。

Python 文檔對如何處理浮點運算並不嚴格。 一些 Python 實現使用 IEEE 754 與四舍五入到最近的關系。

在 IEEE-754 binary64 格式(也稱為“雙精度”格式)中,1+2 -53是 1 和下一個可表示數字 1+2 -52之間的中點。 所以這是一個平局,並且適用四舍五入規則。 1 的有效數字是 1.000…000 2 ,1+2 -52的有效數字是 1.000…001 2 前者是偶數,所以平局規則選擇它,結果為 1。

改為考慮 1+3•2 -54 這是從 1 到 1+2 -52的四分之三。 因此,將其四舍五入到最接近的可表示值將產生 1+2 −52 對於print(1 == 1+3*2**-54) ,您的 Python 實現可能會打印“False”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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