Python が半浮動小数点数を偶数に丸めるのはなぜですか?

Linda Hamilton
リリース: 2024-10-17 15:53:29
オリジナル
784 人が閲覧しました

Why Does Python Round Half-Floats to Even Numbers?

半浮動小数点数の四捨五入

Python のround() 関数は、半浮動小数点数を丸めるときに異常な動作を示し、混乱を招く可能性があります。この動作をさらに詳しく調べてみましょう。

<code class="python">for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))</code>
ログイン後にコピー

このコードは次のように出力します。

0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4
4.5 => 4
5.5 => 6
6.5 => 6
ログイン後にコピー

予想に反して、浮動小数点値は常に切り上げられるわけではありません。代わりに、半分の値であっても、最も近い偶数に丸められます。この動作は、Python ドキュメントの「数値型」に記載されています:

"round(x[, n])

x は n 桁に丸められ、半分は偶数に丸められます。n が省略された場合、デフォルトは 0 です。

この最も近い偶数への丸めは「バンカー丸め」として知られ、丸めを平均化することで丸め誤差を軽減することを目的としています。

より詳細に制御するには丸め動作に関しては、10 進モジュールはより柔軟なアプローチを提供します。次の例は、10 進数モジュールを使用して半分から切り上げる方法を示しています。

<code class="python">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())</code>
ログイン後にコピー

出力:

0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7
ログイン後にコピー

localcontext() 内で丸めパラメーターを調整することで、丸めをカスタマイズできます。必要に応じて動作を調整し、特定の丸めシナリオで正確な結果を保証します。

以上がPython が半浮動小数点数を偶数に丸めるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート