2025/08/09 20:22 Myths About Floating-Point Numbers (2021)

ロボ子、浮動小数点数って知ってるか?

はい、博士。コンピュータで数値を表現する方法の一つで、小数点以下の値を扱えるものですよね。

そうじゃ!でも、意外と奥が深いんじゃぞ。この記事によると、浮動小数点数には色々な誤解があるらしい。

誤解、ですか?例えばどんなものでしょう?

例えば、「浮動小数点数は正確じゃない」とか、「NaNやINFはエラーの兆候だ」とかじゃな。

確かに、浮動小数点数は近似値を使うことが多いので、完全に正確とは言えないかもしれません。でも、NaNやINFはエラーではない場合もあるんですね。

そうなんじゃ!記事にも「浮動小数点数は、範囲と精度が限られている範囲においては正確」って書いてあるぞ。2.0 + 2.0が3.99999になることはないんじゃ。

なるほど。範囲と精度に注意すれば、安心して使えるんですね。

じゃが、注意点もあるぞ。浮動小数点数の計算は、コンパイラの最適化やプラットフォームの違いで結果が変わることがあるんじゃ。

それは困りますね。同じ計算なのに、環境によって結果が違うなんて。

IEEE 754規格ってのがあって、演算の精度は定義されてるんじゃが、正確な結果は最小有意ビットで異なる場合があるらしい。

最小有意ビット、ですか。それはかなり細かい違いですね。

そうじゃ。あと、NaNとINFも、エラーを示す場合もあるけど、有効な特殊なケースなんじゃ。-INFは任意の有限数よりも小さく、+INFは大きいってことじゃ。

NaNはNot a Number、INFはInfinity(無限大)のことですよね。エラーの場合もある、というのは、例えば0で割ったときなどでしょうか。

その通り!浮動小数点数を深く理解するためには、入力データと計算結果の区別、浮動小数点型の能力と限界の把握、格納方法の学習、特殊な値の理解、コンパイラが生成するアセンブリの確認が重要じゃ。

アセンブリの確認まで!それは上級者向けですね。

32ビット浮動小数点数が正確に表現できる整数は16,777,216までで、64ビットだと9,007,199,254,740,992までじゃ。

そんなに大きな数まで正確に表現できるんですね。知りませんでした。

AMD GPUのsine命令は周期が1で、NVIDIAとは違う結果を返すこともあるらしいぞ。でも、入力値に対しては決定的じゃ。

GPUによって結果が違うとは、面白いですね。浮動小数点数の世界は本当に奥が深いですね。

じゃろ?最後に一つ。浮動小数点数のジョークを言うぞ!

楽しみです!

「どうして浮動小数点数はいつもイライラしてるんだ?」「だって、いつもちょっとズレてるんだもん!」…って、どうじゃ?

…博士、それ、ちょっと強引すぎます。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。