コンピュータ アーキテクチャの CS の宿題で、この興味深い問題に出くわしました。私の教授は、単精度数と倍精度数のどちらかに 1 を加えても数値がまったく変化しないような数値を見つけてほしいと言っています。なぜこれが理にかなっているのですか?どうすればこれらの数字を見つけることができますか??
ありがとう!
コンピュータ アーキテクチャの CS の宿題で、この興味深い問題に出くわしました。私の教授は、単精度数と倍精度数のどちらかに 1 を加えても数値がまったく変化しないような数値を見つけてほしいと言っています。なぜこれが理にかなっているのですか?どうすればこれらの数字を見つけることができますか??
ありがとう!
浮動小数点数の精度(追跡できる有効桁数)には制限があることに注意してください。単精度浮動小数点の場合は約7桁、倍精度の場合は約16桁です。
また、浮動小数点数の範囲が3 x 10 ^ 38を超える可能性があることにも注意してください。したがって、すべての桁が重要になるわけではないことは明らかです。
浮動小数点演算は、2 進数 (基数 2) の数値システムに基づいています。ここでの多くの回答は、10 進法 (基数 10) のコンテキストからの精度と値について述べています。これにより、(たとえば)さまざまな浮動小数点形式の最小値と最大値が奇妙に見える値になります。
単精度仮数の 24 (1 暗黙 + 23 明示) ビットは、24 バイナリ桁の精度に変換されます。最上位ビットが設定されている最下位の 24 ビット数は 2^23 で、16 進数で 800000、10 進数で 8388608 (10 進数の有効桁数 7 桁) に変換されます。最上位ビットが設定される最大数は 2^24-1 で、これは 16 進数の ffffff または 16777215 (有効な 10 進数 8 桁) に変換されます。これで、言及された「7〜8桁の精度」がどこから来たのかがわかります。個人的には、2 進数の説明は物事を明確に説明していると思いますが、10 進数の説明は多くの場合、より多くの質問をもたらします。
このフォーラムを参照すると、特定の値について「7 ~ 8 桁の精度」ステートメントが正しくないことを示す投稿が見つかります。背景知識が完全に 10 進数ベースである場合、何が影響したのか疑問に思うでしょう。
ゼロの指数 (バイアスが削除された)、暗黙的なビット (セット)、および明示的なビットがクリアされた場合、値は 1.0000000000000000000000 * 2^0 または 1.0 10 進数になります。指数が 1 の場合、値は 1.0000000000000000000000 * 2^1 または 2.0 10 進数になります。
仮数部の最下位ビットを設定するということは、2^(指数-23) に等しい値を 1.0 * 2^指数に追加することを意味します。-23 は、仮数の最下位ビットが暗黙のビットの右側に 23 位置、つまり 2^指数として定義される暗黙のビットよりも 2 の 23 乗小さいという事実に由来します。
これにより、元の問題をどのように解決できるかについてのヒントが得られるはずです。