Go Float の比較: 包括的なアプローチ
Go で浮動小数点数 (float) が等しいかどうかを比較するには、次のような微妙なアプローチが必要です。浮動小数点の固有の制限と複雑さarithmetic.
ビット表現の使用: 限定的な解決策
提供されたコードは、バイナリ表現を調べて 1 ビットの違いを許容することによって浮動小数点を比較します。ただし、このアプローチには、バイナリ表現におけるビット位置の重要性が無視されているため、欠陥があります。たとえば、非常に大きな浮動小数点の場合、最下位ビットの違いは重要ではない可能性がありますが、非常に小さな浮動小数点の場合、それは重大な偏差を表す可能性があります。
より正確で一般的なアプローチ
より堅牢で正確な方法には、math.Abs 関数を使用して 2 つの浮動小数点数の差を計算することが含まれます。適切なしきい値を設定することで、差が無視できるかどうかを判断し、浮動小数点数が「ほぼ等しい」とみなすことができます。
このアプローチにより、次のことが可能になります。
実装例
以下は実装例です。
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)) // true }
このソリューションはより一般的であり、適応性があるため、さまざまなシナリオを処理し、アプリケーションに応じて等価しきい値を適切に設定できます。
以上がGo で浮動小数点数が等しいかどうかを正確に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。