浮動小数点 "od -tf"のodユーティリティ出力の理解

浮動小数点 "od -tf"のodユーティリティ出力の理解

私はSingle UNIX仕様に基づいて独自のodユーティリティを作成していますが、たとえばod -t f。私は仕様の他のすべての部分を処理するフル機能のユーティリティを持っています。これはプログラミングの質問ではなく、浮動小数点にダンプされたときの出力の意味に関する質問です。

たとえば、次のプログラムを実行すると、標準入力にASCII文字が与えられます。一つ次のメッセージが表示されます。

$ od -A n -t fD -
               1.297e-320

私が提供するだけ

$ od -A n -t fD -
                 3.2e-322

Aとnewlineの値がそれぞれ65と10であることがわかっているので、これらの指数関数的に小さい数字が文脈上何を意味するのかわかりません。仕様では浮動小数点数はあまり扱いませんので、これについての情報をいただきありがとうございます。

答え1

リトルエンディアンシステムでは、これは文字列、浮動小数点、およびダブルスのメモリ内表現の結果です。 「A」、65、または0x41で始まる浮動小数点数(od -t fF

00000000000000000000000001000001

これは9.1⋅10 -44です(参照:この便利なコンバータ) - 0ビットは符号(正数)、0指数(偏向、浮動小数点数の場合は-126)、および分数2 -17 + 2 -23を表します。したがって、表現された値は(2 -17 + 2 -23)×2 -126です(参照:ウルフラムアルファ)。改行文字を追加すると、次のようになります。

00000000000000000000101001000001

つまり 3.678⋅10 -42です。

ダブル(od -t fD)を使用すると、数字の前に別の4バイトのゼロが追加されます。これにより、符号や指数を変更せずに小数を減らし、ダブル(-1022)との偏差が大きくなります。表示される数字は次のとおりです。非常に小さい(参照これは倍精度を使用する別のコンバータです。):「A」は(2 -46 + 2 -52)×2 -1022です(参照:ウルフラムアルファ)、「A」の後に改行文字が続く場合は(2 -41 + 2 -43 + 2 -46 + 2 -52)×2 -1022です(参照)。ウルフラムアルファ)。

関連情報