Go Float 比較: より正確で効率的なアプローチ
Go で 2 つの浮動小数点数 (float64) が等しいかどうかを比較するタスク通常、IEEE 754 の複雑さと浮動小数点のバイナリ表現の処理が含まれます。さまざまなアプローチがありますが、バイナリ表現を 1 ビットの許容誤差で比較することが信頼できる解決策であると想定する人もいます。
func Equal(a, b float64) bool { ba := math.Float64bits(a) bb := math.Float64bits(b) diff := ba - bb if diff < 0 { diff = -diff } // accept one bit difference return diff < 2 }
ただし、このアプローチには限界があります。浮動小数点数の 2 進数表現は、「ほぼ等しい」値を比較するときに必ずしも意味があるとは限りません。より直接的かつ正確な方法は、2 つの数値を減算してその差を求めることです。
package main import ( "fmt" "math" ) const float64EqualityThreshold = 1e-9 func almostEqual(a, b float64) bool { return math.Abs(a - b) <= float64EqualityThreshold } func main() { a := 0.1 b := 0.2 fmt.Println(almostEqual(a + b, 0.3)) }
このアプローチは、最大許容差のしきい値を設定し、浮動小数点の等しいかどうかの比較が必要な最も実用的なシナリオに適しています。 。バイナリ表現を比較するよりも正確で効率的なソリューションが提供されます。
以上がGo で浮動小数点数を正確かつ効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。