Go Float の比較: ほぼ等しいための効率的なアプローチ
Go では、2 つの float (float64) が等しいかどうかを比較するのは難しい作業になる場合がありますIEEE 754 浮動小数点表現の制限のため。従来の「abs(diff) < epsilon」法は近似値を提供しますが、不一致が生じる可能性があります。
提案された解決策: ビットレベルの比較
提案された解決策は、float64 値のビット単位の表現を比較することを提案します。その理論的根拠は、バイナリ表現における 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 つの浮動小数点を減算し、その差が事前定義された値よりも小さいかどうかを確認することです。しきい値:
const float64EqualityThreshold = 1e-9 func almostEqual(a, b float64) bool { return math.Abs(a - b) <= float64EqualityThreshold }
このメソッドは、float の精度を維持し、一貫した結果を提供するため、float64 値をほぼ等しいかどうか比較するための堅牢なソリューションになります。
以上がGo で浮動小数点数を効率的に比較してほぼ等しいかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。