dポイントプレゼントキャンペーン実施中!

floatの有効桁数は6桁なのでしょうか?7桁なのでしょうか?

wiki(https://ja.wikipedia.org/wiki/%E5%8D%98%E7%B2%BE …をみると「指数部が全て 0 でない限り、この形式では「暗黙の整数ビット」を 1 とみなす。従って小数部の23ビットだけがメモリフォーマット上に出現する。従って十進に換算したとき表現できる桁数は log10(224) ≈ 7.225 桁となる。」という記述があります。

この文章でわからないのは、「指数部が全て 0 でない限り」の部分です。
これは、指数部が全て 0 であれば、log10(2^23) ≈ 6.923 で悠桁数が6桁になることも暗に示しているのでしょうか?
また、指数部が0になるときの数字を具体的にイメージができないのですが、どういった数字(10進数)なのでしょうか?

もしご存知の方がいましたら教えていただけると幸いです。

以上、よろしくお願い致します。

A 回答 (3件)

指数部がゼロというのは、正規化数の範囲では、数値のゼロを表現します。

そのため、仮数の整数部もゼロ、小数部もゼロです。
参照されているページの「指数部の符号化方式」の所を見てください。
    • good
    • 0

ご指摘の通りです。

失礼しました
    • good
    • 0

そのWikipediaの記事の「指数部の符号化方式」もよく読んでください。



e=0のときは、「非正規化数」として、 「暗黙の整数ビット1」ではなく「暗黙の整数ビット0」として、仮数を表現します。
「大きい位の0は有効数字に入れない」というルールがありますので、e=0のときは、仮数は最大で23桁〜最小1桁しかありません。
十進6桁どころか、1桁未満の精度にもなります。

1.0 * 2^0 ÷ 2 = 1.0 * 2^-1
1.0 * 2^-1 ÷ 2 = 1.0 * 2^-2
... と、
1.0 * 2^-126
までは、指数を調整して、仮数部 は(暗黙の1を込みで) 24ビットの精度を保ってきます。
これ以上絶対値を小さくしようとすると、指数が表現できなくなります。
そこで指数はそのまま仮数の「暗黙の0」をやめます
1.0 * 2^-126 ÷ 2 = 0.1 * 2^-126
このときに、暗黙の1はやめて0とする、ということを表現するために、 「指数」は2^-126のまま、指数部の符号を 「0」 としまます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>そこで指数はそのまま仮数の「暗黙の0」をやめます
という記述はあっていますか??
「そこで指数はそのまま仮数の「暗黙の1」をやめます」
ではないかと思うのですが、どうでしょう??

お礼日時:2016/01/03 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A