ホームページ  >  記事  >  バックエンド開発  >  Go: float64 を float32 に変換する際の精度の損失を確認する方法

Go: float64 を float32 に変換する際の精度の損失を確認する方法

WBOY
WBOY転載
2024-02-09 09:10:20463ブラウズ

Go:如何检查将 float64 转换为 float32 时的精度损失

php エディター Baicao は今日、よくある問題の解決策を紹介します。それは、float64 を float32 に変換するときに発生する可能性のある精度の損失を確認する方法です。浮動小数点数を変換する場合、2 つのデータ型間のビット数の違いにより、精度の低下が発生する可能性があります。この記事では、変換前と変換後の値を比較して損失があるかどうかを判断する方法を詳しく説明し、開発者がこの問題に適切に対処できるようにするための実行可能な解決策を提供します。

質問の内容

float64 値を受信したが、それを float32 値としてネットワーク経由で別のサービスに送信する必要があるシナリオがあります。受信した値は常に float32 に収まる必要があることがわかっています。ただし、念のため、float32 に変換するとデータが失われることを記録しておきます。

float32 と float64 を直接比較できないため、このコード ブロックは コンパイルされません。

リーリー

この問題が発生しているかどうかを確認する簡単な方法はありますか? このチェックは頻繁に発生するため、文字列変換は避けたいと考えています。

回避策

検証のみを目的として、float32 値を float64 に変換して戻すことができます。

変換された値が同じ値を表すかどうかを確認するには、元の値 (入力) と比較するだけです。 (error の代わりに) ok bool メッセージを返すだけでも十分/慣用的です:

リーリー

(注: nan のようなエッジケースはチェックされません。)

### 試して: ### リーリー

出力 (

go playground

で試してください): リーリー これにより、変換された値が

float64

に非常に近い場合でも、float32float64 よりも精度が低いため、通常は ok = false の結果が得られることに注意してください。入力。

したがって、実際には、変換された値の違いを確認する方が便利です。提案されたソリューションは絶対的な差をチェックしますが、これはあまり役に立ちません。たとえば、1000000.11000000 は、差が 0.1 であっても、非常に近い数値です。 0.00010.00011 の差は 0.00001 とはるかに小さいですが、数値に比べればその差ははるかに大きくなります。

したがって、相対的な違いを確認する必要があります。例:

リーリー ### 試して: ### リーリー

出力 (

go playground

で試してください): リーリー

以上がGo: float64 を float32 に変換する際の精度の損失を確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。