最小の単精度浮動小数点数と倍精度浮動小数点は、IEEE 754でその逆数がまだ等しくないようになりますか?最小浮動小数点X s.t. 1/Xは無限ではありません
編集:私はちょうどそれがどのように動作するかを理解したいので、私はそれを聞いてるのよ
最小の単精度浮動小数点数と倍精度浮動小数点は、IEEE 754でその逆数がまだ等しくないようになりますか?最小浮動小数点X s.t. 1/Xは無限ではありません
編集:私はちょうどそれがどのように動作するかを理解したいので、私はそれを聞いてるのよ
私たちは、一例として、IEEE 754倍精度を使用してみましょう。 Cコンパイルプラットフォームではdouble
にマップされているものとします。 C99 hexadecimal notationが便利なので、我々はそれを利用するでしょう。 long double
には、double
以上の精度の余分なビットが少なくとも1つあるとします。たとえば、long double
は、インテルの80ビット「拡張倍精度」です。
double
操作1.0/x
は、除算の数学的結果が数値1.fffffffffffff8p1023L
より大きい場合にのみ、+inf
に丸めます。この数値はdouble
としては表現されませんが、は、正確にはの中間点であり、の後の数値はdouble
の指数の範囲が広い場合は、の後に次の数値がdouble
となります。これは、/
のような基本的な操作を無限に丸めるかどうかをIEEE 754が定義する方法です。
したがって、最高値double
値は、次の手順で計算することができる往復+inf
に丸める:
FE_DOWNWARD
から1.0L/1.fffffffffffff8p1023L
double
に丸めます。無限に丸めない最小値は、その直後の値です。例えば、標準化されているように、nextafter
で計算することができる。 in POSIX。
これらの4つのステップをCに翻訳するのは簡単です(#pragma STDC FENV_ACCESS ON
を忘れないでください)。または、トーマス・ウェラーが推薦したように、ブルートフォースでそれを行う。二分法による検索では、64ステップ以下の時間がかかります。
注:FE_UPWARD
丸めモードと3つの手順のみを使用して有限結果に往復する最小値を計算することは可能ですが、これは正確な操作ではないという追加のプロパティに依存します。 4ステップ法は、概念的にはよりクリーンです。
ブルートゥースです。 –
質問は理論的にはCの浮動小数点です – dkrikun