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 サイトの他の関連記事を参照してください。