」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼浮點數捨入的結果令人驚訝?

為什麼浮點數捨入的結果令人驚訝?

發佈於2024-11-04
瀏覽:204

Why Does Float Rounding Surprise with Even Results?

半浮點數舍入困境

使用 round() 函數遇到奇怪的情況?觀察以下行為:

for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))

您可能期望浮點值始終向上舍入,但令人驚訝的是它們舍入到最接近的偶數。

行為背後的原因

數位類型的文件透過聲明「round(x[, n]) x四捨五入到n位數,四捨五入到一半來澄清這種特殊行為甚至。銀行家舍入不是持續向上或向下舍入,這會放大捨入誤差,而是透過瞄準最接近的偶數來補償。

受控舍入解決方案

精確處理舍入,利用十進位模組。此模組為您提供了指定特定舍入策略的選項。例如,要從一半向上捨入:

>>> from decimal import localcontext, Decimal, ROUND_HALF_UP
>>> with localcontext() as ctx:
...     ctx.rounding = ROUND_HALF_UP
...     for i in range(1, 15, 2):
...         n = Decimal(i) / 2
...         print(n, '=>', n.to_integral_value())
...
0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7
版本聲明 本文轉載於:1729151236如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3