• ベストアンサー

なぜ同じ実数型は整数型よりも広い範囲を表現できるのですか?

なぜ同じ実数型は整数型よりも広い範囲を表現できるのですか? 素朴な疑問です。 整数型が表現できる範囲は単純で理解できるのですが、それだけに 実数型が同じ情報量(バイト数)でさらに広い範囲の数を表現できるのはなぜでしょう? 仮数部や指数部の数字を掛けたり足したりするだけで 全ての数をきっちり作れるというのはにわかには信じられません。 もしかして近似値を使っているのでしょうか?(0.099→0.1のように)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

実数型がその表現範囲において「全ての数をきっちり作れる」わけではありません。 有効桁数というものがあり、その桁数を越えた部分に関しては、保障されません。 > もしかして近似値を使っているのでしょうか?(0.099→0.1のように) そこまでひどくはありませんが、0.999999999999999999999999999999999999という数値が1.0になってしまったりします。

trap1130
質問者

お礼

ありがとうございます。 >実数型がその表現範囲において「全ての数をきっちり作れる」わけではありません。 モヤモヤがスッキリしました。 もし有効桁数が7桁だったら 1.0000003~や0.9999997~を作って1.000000として扱うようなものでしょうか。

trap1130
質問者

補足

正直、お二人共にベストアンサーを差し上げたいのですが、どちらか選ばなければいけないので回答の早かった方にします。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

同じバイト数なら、実数型は精度というか有効数字が落ちます。 http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0 例えば、単精度で指数部が2の100乗なら、下の方の桁(2^0,2^1等)は仮数で表現できません。 これとは別の話で、有限の10進法の小数の全てを、有限の2進法の小数で表わすことができないため、誤差が生じます。 例えば、10進法の0.1は二進法では循環小数となるため、有限桁の2進法にするさいに誤差ができます。

trap1130
質問者

お礼

詳しい解説をありがとうございます。 >同じバイト数なら、実数型は精度というか有効数字が落ちます。 なるほど。例えば32bitで正の数だと整数型は9桁まで表現できるのに 浮動小数点型は7桁までしか有効でないですね。 >例えば、単精度で指数部が2の100乗なら、下の方の桁(2^0,2^1等)は仮数で表現できません。 こうして具体例をあげてもらえてわかりやすかったです。 >これとは別の話で、有限の10進法の小数の全てを、有限の2進法の小数で表わすことができないため、誤差が生じます。 >例えば、10進法の0.1は二進法では循環小数となるため、有限桁の2進法にするさいに誤差ができます。 固定小数点数では0.1が表現できないのは聞いたことがあるんですが(←情報処理試験の問題だったかも) 浮動小数点数はもしかして表現できるのかな?などと思ってました。

trap1130
質問者

補足

正直、お二人共にベストアンサーを差し上げたいのですが、どちらか選ばなければいけないので回答の早かった方にします。

関連するQ&A

専門家に質問してみよう