問題CPP00202の解答例と解説 C++ Lv.2

実数型の大きさ(15分)


<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

整数の大きさの問題がわかったら、こちらは難しくないよね。float と double はそれぞれ4byteと8byteを使う型なんだ。

それではfloat型が32bit(=4byte)の領域をどう使っているのか見てみよう。2進数と10進数の関係は以下のようになるよ。整数と比べて実数はちょっと難しいね。ビットの使い方は左から、1bitが+-の符号、8bitで値の桁数である指数部、23bitで小数部分である仮数部からなるよ。

2進数10進数
0_00000000_000000000000000000000000
0_00000001_000000000000000000000001.175494e-38=2(1-127)+0.000000
0_00000010_000000000000000000000002.350988e-38=2(2-127)+0.000000
0_00000011_000000000000000000000004.701977e-38=2(3-127)+0.000000
......
0_01111110_000000000000000000000000.500000=2(126-127)+0.000000
0_01111111_000000000000000000000001.000000=2(127-127)+0.000000
0_10000000_000000000000000000000002.000000=2(128-127)+0.000000
0_10000001_000000000000000000000004.000000=2(129-127)+0.000000
......
0_11111100_000000000000000000000004.253529e+37  =2(252-127)+0.000000
0_11111101_000000000000000000000008.507059e+37=2(253-127)+0.000000
0_11111110_000000000000000000000001.704141e+38=2(254-127)+0.000000
0_11111111_000000000000000000000003.402823e+38=2(255-127)+0.000000

指数部は、2の何乗か、というのに使われていて、127を引いた値が使われているんだ(表の一番右の列を見て)。小数部分というのは小数点以下のことだけど、ここでは簡単のため、みんな 0 のときのことを書いているよ

この表では負の値のことも省略しているけど、最初の1bitの領域が1になるだけだよ。あと、floatのことを浮動小数と呼んだりするけど、これは大きな値を1桁の小数付きの実数×2の指数と表して、小数部分をずらして値を表現しているからなんだ。double は倍精度浮動小数と言われるけど、floatの倍の大きさで値を表現するからなんだ。興味のある人はインターネットなどで調べてみよう。




初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録