ホームページ >バックエンド開発 >Golang >浮動小数点の精度の問題を考慮して、Go で float64 を int に安全に変換するにはどうすればよいですか?

浮動小数点の精度の問題を考慮して、Go で float64 を int に安全に変換するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-14 22:26:11478ブラウズ

How Can I Safely Convert float64 to int in Go, Considering Floating-Point Precision Issues?

Go での Float64 から Int への変換: 浮動小数点精度への対処

Go で float64 値を int に変換すると、浮動小数点精度の制限により、予期しない結果が発生する可能性があります。これらの制限を理解することが、エラーを回避するための鍵です。

浮動小数点表現

コンピュータは、IEEE-754 標準を使用して float64 数値を格納します。この 2 進数表現には限られた数のビット (この場合は 64) が含まれており、すべての 10 進数を正確に表現できるわけではありません。 100.55 のような 10 進浮動小数点を float64 に変換すると、結果は元の値と若干異なる近似値になります。

例: 浮動小数点精度の問題

次のコード スニペットは、この問題を示しています。

package main

import "fmt"

func main() {
    x := 100.55
    fmt.Println(x - float64(int(x)))    // Output: 0.5499999999999972
}

出力に示されているように、元の float64 値から float64(int(x)) を減算すると、予想される 0.55 ではなく 0.5499999999999972 が得られます。この違いは、float64 形式の 100.55 が元の値とはわずかに異なるバイナリ近似であるために発生します。

浮動小数点エラーの回避

次の場合に浮動小数点エラーを回避するにはfloat64 を int に変換するには、次のことを考慮してください。アプローチ:

  • 浮動小数点演算の使用: 精度を維持するために、可能な限り浮動小数点値の演算を実行します。
  • 有効数字に丸めます: 指定された精度で fmt.Printf 関数を使用して、float64 値を必要な有効桁数で表示します。このアプローチでは、精度を損なうことなく、より視覚的に魅力的な表現を提供できます。
  • 整数演算を使用する: 可能であれば、財務値を整数 (ドルではなくセントなど) で表し、float64 に変換します。必要な場合のみ。このアプローチにより、正確な整数演算が保証され、浮動小数点の丸め誤差が回避されます。

結論

浮動小数点精度の制限を理解し、適切な手法を利用することで、開発者は次のことが可能になります。エラーを最小限に抑え、必要なレベルの精度を維持しながら、Go で float64 値を int に効果的に変換します。

以上が浮動小数点の精度の問題を考慮して、Go で float64 を int に安全に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。