問題CPP00202の解答例と解説 C++ Lv.2
実数型の大きさ(15分)
<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。
整数の大きさの問題がわかったら、こちらは難しくないよね。float と double はそれぞれ4byteと8byteを使う型なんだ。
それではfloat型が32bit(=4byte)の領域をどう使っているのか見てみよう。2進数と10進数の関係は以下のようになるよ。整数と比べて実数はちょっと難しいね。ビットの使い方は左から、1bitが+-の符号、8bitで値の桁数である指数部、23bitで小数部分である仮数部からなるよ。
指数部は、2の何乗か、というのに使われていて、127を引いた値が使われているんだ(表の一番右の列を見て)。小数部分というのは小数点以下のことだけど、ここでは簡単のため、みんな 0 のときのことを書いているよ
この表では負の値のことも省略しているけど、最初の1bitの領域が1になるだけだよ。あと、floatのことを浮動小数と呼んだりするけど、これは大きな値を1桁の小数付きの実数×2の指数と表して、小数部分をずらして値を表現しているからなんだ。double は倍精度浮動小数と言われるけど、floatの倍の大きさで値を表現するからなんだ。興味のある人はインターネットなどで調べてみよう。
それではfloat型が32bit(=4byte)の領域をどう使っているのか見てみよう。2進数と10進数の関係は以下のようになるよ。整数と比べて実数はちょっと難しいね。ビットの使い方は左から、1bitが+-の符号、8bitで値の桁数である指数部、23bitで小数部分である仮数部からなるよ。
2進数 | 10進数 | |
---|---|---|
0_00000000_00000000000000000000000 | 0 | |
0_00000001_00000000000000000000000 | 1.175494e-38 | =2(1-127)+0.000000 |
0_00000010_00000000000000000000000 | 2.350988e-38 | =2(2-127)+0.000000 |
0_00000011_00000000000000000000000 | 4.701977e-38 | =2(3-127)+0.000000 |
... | ... | |
0_01111110_00000000000000000000000 | 0.500000 | =2(126-127)+0.000000 |
0_01111111_00000000000000000000000 | 1.000000 | =2(127-127)+0.000000 |
0_10000000_00000000000000000000000 | 2.000000 | =2(128-127)+0.000000 |
0_10000001_00000000000000000000000 | 4.000000 | =2(129-127)+0.000000 |
... | ... | |
0_11111100_00000000000000000000000 | 4.253529e+37 | =2(252-127)+0.000000 |
0_11111101_00000000000000000000000 | 8.507059e+37 | =2(253-127)+0.000000 |
0_11111110_00000000000000000000000 | 1.704141e+38 | =2(254-127)+0.000000 |
0_11111111_00000000000000000000000 | 3.402823e+38 | =2(255-127)+0.000000 |
この表では負の値のことも省略しているけど、最初の1bitの領域が1になるだけだよ。あと、floatのことを浮動小数と呼んだりするけど、これは大きな値を1桁の小数付きの実数×2の指数と表して、小数部分をずらして値を表現しているからなんだ。double は倍精度浮動小数と言われるけど、floatの倍の大きさで値を表現するからなんだ。興味のある人はインターネットなどで調べてみよう。
初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録
新規登録