ホームページ > バックエンド開発 > Golang > Go の float32 と float64: 実際にどの程度の精度が必要ですか?

Go の float32 と float64: 実際にどの程度の精度が必要ですか?

Barbara Streisand
リリース: 2024-12-08 10:52:12
オリジナル
243 人が閲覧しました

Go's float32 vs. float64: How Much Precision Do You Really Need?

Go における浮動小数点数の精度: float32 と float64

Go では、浮動小数点数は IEEE を使用して表現されます。基数 2 の 754 バイナリ形式。浮動小数点数の精度は、浮動小数点数を表すために使用されるビット数を指します。数値の精度を決定する仮数。 Go は、float32 と float64 という 2 つの一般的な浮動小数点型を提供します。

これらの型の違いは、精度にあります。 float32 の仮数は 23 ビットですが、float64 の仮数は 52 ビットです。この精度の高さにより、float64 は float32 と比較して、より広範囲の値を高い精度で表すことができます。

これを説明するために、次の例を考えてみましょう。

func main() {
    a := float64(0.2) // Initializing a float64 variable
    a += 0.1
    a -= 0.3
    var i int
    for i = 0; a < 1.0; i++ {
        a += a
    }
    fmt.Printf("After %d iterations, a = %e\n", i, a)
}
ログイン後にコピー

このプログラムは累積を示します。値に対して繰り返し演算を実行するときの浮動小数点エラーの発生率。この場合、変数「a」は値 0.2 で初期化され、加算と減算の演算はそれぞれ 0.1 と 0.3 で実行されます。これは、'a' が 1.0 以上になるまで繰り返されます。

このプログラムを float64 から float32 で実行すると、無限ループに入ります。これは、float32 での 0.1 の 2 進表現が実際の 10 進数値とわずかに異なるため、丸め誤差が発生するためです。その結果、「a」の値は正確に累積されず、ループが無限に続きます。

一方、float64 は精度が高く、値をより正確に表現できます。そのため、float64 を使用する同じプログラムは、「a」が 1.000000e 00 に達すると最終的にループを終了します。

精度の違いをよりよく理解するには、math.Float32bits 関数と math.Float64bits 関数を使用して浮動小数点数を変換できます。 -値をバイナリ表現にポイントします。これにより、ビットの分布を調べて、float32 と float64 の精度の違いの原因を特定できます。

以上がGo の float32 と float64: 実際にどの程度の精度が必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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