ホームページ > バックエンド開発 > Golang > Go で浮動小数点数が等しいかどうかを正確に比較するにはどうすればよいですか?

Go で浮動小数点数が等しいかどうかを正確に比較するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-10 08:14:09
オリジナル
216 人が閲覧しました

How to Accurately Compare Floating-Point Numbers for Equality in Go?

Go Float の比較: 包括的なアプローチ

Go で浮動小数点数 (float) が等しいかどうかを比較するには、次のような微妙なアプローチが必要です。浮動小数点の固有の制限と複雑さarithmetic.

ビット表現の使用: 限定的な解決策

提供されたコードは、バイナリ表現を調べて 1 ビットの違いを許容することによって浮動小数点を比較します。ただし、このアプローチには、バイナリ表現におけるビット位置の重要性が無視されているため、欠陥があります。たとえば、非常に大きな浮動小数点の場合、最下位ビットの違いは重要ではない可能性がありますが、非常に小さな浮動小数点の場合、それは重大な偏差を表す可能性があります。

より正確で一般的なアプローチ

より堅牢で正確な方法には、math.Abs​​ 関数を使用して 2 つの浮動小数点数の差を計算することが含まれます。適切なしきい値を設定することで、差が無視できるかどうかを判断し、浮動小数点数が「ほぼ等しい」とみなすことができます。

このアプローチにより、次のことが可能になります。

  • 小さい浮動小数点数と大きい浮動小数点の両方を処理します。効果的に
  • 1 ビット差分ヒューリスティックの主観性を排除します
  • 等価しきい値を設定します特定のアプリケーション要件に基づく

実装例

以下は実装例です。

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

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