Golang での精度の低下を回避する方法

WBOY
リリース: 2024-02-25 19:00:11
オリジナル
449 人が閲覧しました

如何避免在 Golang 中发生精度丢失

Golang での精度低下を回避する方法

Golang では、浮動小数点演算の特性により、精度低下が発生することがあります。この記事では、Golang で精度の低下を回避するためのいくつかの方法を共有し、具体的なコード例を示します。

1. float64 の代わりに Decimal 型を使用する

Golang の float64 型は、小数を扱うときに精度が失われる可能性があります。この状況を回避するには、float64 の代わりにサードパーティ ライブラリ github.com/shopspring/decimal の Decimal 型を使用します。

package main

import (
    "fmt"
    "github.com/shopspring/decimal"
)

func main() {
    num1 := decimal.NewFromFloat(0.1)
    num2 := decimal.NewFromFloat(0.2)

    sum := num1.Add(num2)
    fmt.Println(sum)
}
ログイン後にコピー

2. 計算には整数を使用する

精度の低下を避けるもう 1 つの方法は、計算のために小数を整数に変換し、結果を小数に変換し直すことです。

package main

import "fmt"

func main() {
    num1 := 1.23
    num2 := 4.56

    precision := 1000000 // 精度为小数点后六位

    intNum1 := int(num1 * float64(precision))
    intNum2 := int(num2 * float64(precision))

    sum := intNum1 + intNum2
    result := float64(sum) / float64(precision)

    fmt.Println(result)
}
ログイン後にコピー

3. math/big パッケージを使用して大きな整数の計算を処理する

非常に大きな整数を処理する必要がある場合は、Golang の組み込み math/big## を使用できます。 # 計算用のパッケージ。精度の低下の問題を回避します。

package main

import (
    "fmt"
    "math/big"
)

func main() {
    num1 := new(big.Int)
    num1.SetString("12345678901234567890", 10)

    num2 := new(big.Int)
    num2.SetString("98765432109876543210", 10)

    sum := new(big.Int)
    sum.Add(num1, num2)

    fmt.Println(sum)
}
ログイン後にコピー
上記の方法により、Golang の精度損失の問題を回避し、計算結果が正確であることを保証できます。この記事が役立つかもしれません。

以上がGolang での精度の低下を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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