0

私は「C の数値レシピ The Art of Scientific Computing」を読んでいます。第 1 章には、アーキテクチャにとらわれない観​​点から、浮動小数点数がどのように表現されるかを説明するセクションがあります。この投稿は、Intel プロセッサの i386 ファミリと、そのアーキテクチャで浮動小数点数がどのように表現されるかに関するものです。私の質問は、偏った指数がどのように計算され、仮数がどのように表現されるかを具体的に対象としています。仮数部に格納されている先頭のものかどうか。

「Numerical Recipes in C The Art of Scientific Computing」では、次の式が与えられています。

■ XMXB^(e - E) : s は符号を表す単一ビット、M は仮数、B は基数 (基数 2)、e は指数、E は指数のバイアスです。

  1. e は 2 の補数で格納されていますか、それとも符号なし 8 ビット フィールドですか?
  2. E はバイアスです。バイアスは127ですか?
  3. 仮数は 1.00000(2) と読むか、.0000000(2) と読むか。(2) は基数 2 です。
4

2 に答える 2

1
  1. e は符号なし 8 ビット フィールドです。バイアス (E) は、正の指数と負の指数の両方を表すためにあります。これは、実際の計算を行う上で 2 の補数よりも少しまともな表現ですが、考えるのが少し厄介です。

  2. バイアスとは、浮動小数点型によって異なります。標準 IEEE float の場合は 127 です。標準 IEEE double の場合は 1023 です。

  3. よく分からない。標準の float 型と double 型の場合、通常の数値の仮数部の前に暗黙の 1 ビットがあり、非正規数の場合はありません。バイナリ表現 (符号、指数、仮数) が である IEEE 浮動小数点数を持っている場合、仮数 の前にあることに注意し0 01111111 01110111011101110111011てください。(-1)^0 * 2^(01111111b) * 1.01110111011101110111011b1.

指数が可能な限り小さい (ゼロ) 場合、非正規数になります。指数が可能な限り大きい場合 (すべて 1)、無限大と NaN があります。ここでは、仮数の意味が異なります。他のすべての指数は「正規数」を表します。

Intel の 80 ビットlong double型の場合、暗黙の 1 ビットはなく(仮数の上位ビットに格納されます)、通常の表現を持つ s で算術演算を実行しようとすると何が起こるか思い出せませんlong doubleが、暗黙のビットはオフ。x87 をビルドしやすくするためにこれを行ったと思います。

于 2012-12-09T11:33:07.030 に答える
1
于 2012-12-09T02:07:58.570 に答える