この 2 進数の浮動小数点表現について頭を悩ませようとしていますが、どこを見ても、質問に対する適切な答えが見つかりませんでした。
指数が偏っているのはなぜですか?
古き良き信頼できる 2 の補数法の何が問題なのですか?
このトピックに関するウィキペディアの記事を見てみましたが、「符号付きの値の通常の表現では比較が難しくなる」と書かれています。
この 2 進数の浮動小数点表現について頭を悩ませようとしていますが、どこを見ても、質問に対する適切な答えが見つかりませんでした。
指数が偏っているのはなぜですか?
古き良き信頼できる 2 の補数法の何が問題なのですか?
このトピックに関するウィキペディアの記事を見てみましたが、「符号付きの値の通常の表現では比較が難しくなる」と書かれています。
IEEE 754 エンコーディングには、2 つの正の非 NaN 数値の間で、対応するビット文字列を辞書式に比較するだけで、または同等に、これらのビット文字列を符号なし整数として解釈し、それらの整数を比較することによって、順序比較を実行できるという便利な特性があります。これは、+0.0 から +Infinity までの浮動小数点範囲全体で機能します (そして、比較を拡張して符号を考慮するのは簡単なことです)。したがって、たとえば IEEE 754 バイナリ 64 形式で1.1
は、ビット文字列 (msb が最初) としてエンコードされます。
0011111111110001100110011001100110011001100110011001100110011010
while0.01
はビット文字列としてエンコードされます
0011111110000100011110101110000101000111101011100001010001111011
のビット文字列の前に辞書式に発生します1.1
。
これが機能するためには、指数が小さい数値を比較する前に、指数が大きい数値を比較する必要があります。バイアスされた指数はそれを機能させますが、2 の補数で表現された指数は比較をより複雑にします。これがウィキペディアのコメントが当てはまるものだと思います。
もう 1 つの観察結果は、選択したエンコーディングでは、浮動小数点数+0.0
が完全にゼロで構成されるビット文字列としてエンコードされることです。