KATUBLO
2019年01月27日

【アセンブラ言語】固定少数点と浮動少数点についてそれぞれわかりやすく解説した!

ゴール

固定少数点と浮動少数点の違いの定義を理解する。

 

固定少数点とは?

一般的に少数を表記するときと全く同じ書き方。例えば4.2、5.88とか少数部分は.の右側として表記する。これを2進数表記の時も同じように扱うことができて、1001.0011 といったように少数点を使って表記する書き方。

 

浮動少数点とは?

一方浮動少数点というのは、固定少数点で書くと、0.000000000101 といったように長くなる数値を

 

[math]1.01 ×2^{-10}[/math]

 

といったようにコンパクトに表現する方法である。またこの1.01の部分を仮数、2の部分を基数、-10の部分を指数 と呼ぶ。

 

少数を含む10進数を2進数に変換する

10進数で表記された少数を含む値

118.4459

 

を2進数に変換すると

 

1110110.01110010001001101000000010011101010010010101

 

となる。だが実際にこの数字の少数点部分は途中で打ち切られたものであるので、厳密には正しくはない。この変換はどのようにして行なったかわからない人もいるので、わかりやすく説明している記事のリンクを貼っておきました。

 

 

 

単精度浮動少数点32bit

浮動少数点を32bitで表現しようとするとき、中の内訳はどのようになっているだろうか?

 

単精度浮動少数点32bitはC言語のfloat型に対応する。

 

[内訳]

 

符号:1bit

指数:8bit

仮数:23bit

 

倍精度浮動少数点64bit

倍精度浮動少数点64bitはC言語のdouble型に対応する。

 

[内訳]

 

符号:1bit

指数:11bit

仮数:20bit + 32bit

 

 

固定小数点10.1(2)を浮動少数点表記でbitに記録する

 

固定少数点10.1(2)を浮動少数点表記として32bitに記録する。

浮動少数点に変換すると

 

[math] 10.1 = + 0.101 × 2^2 [/math]

 

となる。

 

符号部

正なら0、負なら1を格納する。10.1は正なので、0を格納

 

指数部

嵩上げ表現といって-128を0000000として表記する。今回は2であるため128+2として2進数で表記する。

 

10000010を格納

 

仮数部

仮数部は少数点の部分を上からbitにそのまま格納すればいいので

 

1010000000000000を格納

 

 

まとめる

整理すると10.1(2)を浮動少数点で32bitで保存したとき

 

符号部:0

指数:10000010

仮数部:1010000000000000

 

となった。

 

 

感想・気づき

今度はこれをアセンブリ言語のプログラムで実装したいと思います。

最後まで読んで頂き
ありがとうございました。
SNS等でのシェアが頂ければ幸いです。

プロフィール

@KATUO

現在都内私立大学に通う大学3年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習をスタート。この時期からプログラミングにどハマりし、現在までに「AIスタートアップ」「Webマーケティング会社」でエンジニアとしての業務に没頭してきた。

過去の投稿