php エディター Baicao は今日、よくある問題の解決策を紹介します。それは、float64 を float32 に変換するときに発生する可能性のある精度の損失を確認する方法です。浮動小数点数を変換する場合、2 つのデータ型間のビット数の違いにより、精度の低下が発生する可能性があります。この記事では、変換前と変換後の値を比較して損失があるかどうかを判断する方法を詳しく説明し、開発者がこの問題に適切に対処できるようにするための実行可能な解決策を提供します。
float64 値を受信したが、それを float32 値としてネットワーク経由で別のサービスに送信する必要があるシナリオがあります。受信した値は常に float32 に収まる必要があることがわかっています。ただし、念のため、float32 に変換するとデータが失われることを記録しておきます。
float32 と float64 を直接比較できないため、このコード ブロックは コンパイルされません。
リーリーこの問題が発生しているかどうかを確認する簡単な方法はありますか? このチェックは頻繁に発生するため、文字列変換は避けたいと考えています。
検証のみを目的として、float32
値を float64
に変換して戻すことができます。
変換された値が同じ値を表すかどうかを確認するには、元の値 (入力) と比較するだけです。 (error
の代わりに) ok bool
メッセージを返すだけでも十分/慣用的です:
(注: nan
のようなエッジケースはチェックされません。)
出力 (
go playgroundで試してください): リーリー これにより、変換された値が
float64 に非常に近い場合でも、float32
は float64
よりも精度が低いため、通常は ok = false
の結果が得られることに注意してください。入力。
したがって、実際には、変換された値の違いを確認する方が便利です。提案されたソリューションは絶対的な差をチェックしますが、これはあまり役に立ちません。たとえば、1000000.1
と 1000000
は、差が 0.1
であっても、非常に近い数値です。 0.0001
と 0.00011
の差は 0.00001
とはるかに小さいですが、数値に比べればその差ははるかに大きくなります。
したがって、相対的な違いを確認する必要があります。例:
リーリー ### 試して: ### リーリー出力 (
go playgroundで試してください): リーリー
以上がGo: float64 を float32 に変換する際の精度の損失を確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。