IEEE 754 標準では、16,777,214 個の 32 ビット浮動小数点値を NaN、またはすべての可能な値の 0.4% として定義しているようです。
非常に多くの有用な値を予約しているのに、本質的に必要なのはシグナリング用とクワイエット NaN 用の 2 つだけである理由は何なのだろうかと思います。
この質問が些細な場合は申し訳ありませんが、インターネット上で説明が見つかりませんでした。
IEEE 754 標準では、16,777,214 個の 32 ビット浮動小数点値を NaN、またはすべての可能な値の 0.4% として定義しているようです。
非常に多くの有用な値を予約しているのに、本質的に必要なのはシグナリング用とクワイエット NaN 用の 2 つだけである理由は何なのだろうかと思います。
この質問が些細な場合は申し訳ありませんが、インターネット上で説明が見つかりませんでした。
IEEE-754 規格では、NaN を指数がすべて 1 で仮数がゼロ以外の数値として定義しています。仮数部の最上位ビットは、NaN がシグナリングかクワイエットかを指定します。仮数の残りのビットは、NaNのペイロードと呼ばれるものを形成します。
演算のオペランドの 1 つが NaN の場合、結果は常に NaN であり、結果のペイロードは NaN オペランドの 1 つのペイロードと等しくなります。ペイロードの保存は科学計算の効率にとって重要であり、少なくとも 1 つの企業が NaN ペイロードを独自の用途に使用することを提案しています。
より基本的な用語では、NaN は有用な数値情報を保持せず、いずれにせよ 32 ビット全体を予約する必要があるため、標準で定義されたペイロードがなければ仮数の未使用ビットは無駄になります。
同様に、64 ビット浮動小数点数のペイロードもあり、可能な値は ~10^15 です。残念ながら、ペイロードを 32 ビットと 64 ビットの浮動小数点数の間で転送し、その逆に転送する方法、つまり、最上位ビットと最下位ビットのどちらを保持するかについては、実装によって異なります。ペイロードの処理はマシン固有であるため、異なるマシンでペイロードを処理するには異なるコードが必要です。
バイナリ操作の後にどの NaN ペイロードが伝播されるかについては、あまり心配しません。NaN は、低い確率で発生する例外的な値であり、そのうちの 2 つを取得する確率はほとんどありません。