数値の表し方(特に小数)
数値の表し方
コンピュータの中で利用される数値には、
1.10進数値
2.固定小数点
3.浮動小数点
の3種類があります。
トレードBOTを書けるようになる上で、実用上浮動小数点は覚えて置いた方がいいので、そこだけ説明します。 それ以外は詳しく説明はしませんが、用語集のリンクを置いておきます。 必要に応じて読んでください。
浮動小数点
例えば、365という数値は、0.356 x 103(^は乗数を表す)と表す事が出来、同じように3560という数字は0.356 x 104と表すことが出来ますね。
これを一般化して、365や3560をNと表して、 0.365をmと表して、 103とか104をd x nと表したとき、
Nを数値
mを仮数部
dを底
nを指数部
と呼びます。
この、仮数部(m)と指数部(n)の2つを使って、(仮数部, 指数部)という形で表現する方法を浮動小数点表示といいます。
この方法を使うと、365は(0.356, 3)、3560は(0.356, 4)と表すことが出来るようになります。 そして小数点の次(つまり0.のあと)に有効数字がくるように表現することを、「正規化する」といいます。
これを、正規化した2進数で表現してみましょう。
ここで、(数字)2とか(数字)10とか(数字)16が出てきますが、これは括弧内の数字を何進数で表しているかわかりやすく表現するために使っています。(以後時々出てきます)
(365)10 = (16D)16
となり、これをさらに2進数になおすと、(ここから基数が2になります)
(0001 0110 1101)2
となります。(わかりやすさのために、16進1桁ごとにスペースを入れいています)
ここからさらに上位3桁の0をとると、(101101101)2となり、これを正規化すると、0.101101101 x 29となります。
32ビットの浮動小数は、浮動小数点表示という図のように先頭の1ビットで値の「正」「負」を示し、指数部は8ビット、残りの23ビットが仮数部になります。
todo 浮動小数点表示の図を挿入
32ビット単精度で扱える指数は、-126~127で、それに127を加えて1~254になるようになっています。 (指数部が0と255の時は特殊な意味を持ちます。詳しくは参考資料をごらんください)
もう1つ、浮動小数点について知っておいて欲しいことがあります。
この表現の性質上、浮動小数点の計算をするときは、丸め誤差が出るということです。
これはプログラムを書く上で避けて通れない問題なので、知らないと頭を悩ますときが来ますが、知っていればうまく対処する方法を見つけることが出来ます。頭の片隅に置いておいてください。
詳しく知りたい場合は、こちらの記事で詳しく解説してくださっています
IEEE 754 浮動小数点入門 - ushiostarfish’s diary
参考資料: