この投稿では、浮動小数点と固定小数点について説明します。
IEEE754の32bit浮動小数点(単精度)は、符号1bit、指数8bit、仮数23bitで表現します。
例)10進数 85.125
浮動小数点 0x42AA4000
ここでは変換方法の説明は省きますが、変換には多くの処理が必要です。
プログラムで浮動小数点の宣言(float)するとFPUの搭載MCUと非搭載MCUでは次のような違いがあります。
FPU | 処理スピード | コード量 | 価格 |
---|---|---|---|
搭載MCU(FPU命令コードあり) | 早い | 少ない | 高い |
非搭載MCU(FPU命令コードなし) | 遅い | 多い | 安い |
その為、FPU非搭載MCUで固定小数点を用いて場合があります。固定小数点は、各企業でルールを決めて使っていると思います。ここでは32bit固定小数点を符号1bit、整数15bit、小数点16bit(1/65536)で表現することにします。
例)10進数 85.125
固定小数点 85.125×65536 = 0x00552000
よって、浮動小数点と固定小数点では次のような違いがあります。
小数点 | 規格 | 計算 | 表現できる範囲 | 計算精度 |
---|---|---|---|---|
浮動小数点 | 規格がある | 難しい | 広い | 高い |
固定小数点 | 各企業で異なる | 簡単 | 狭い | 低い |
昔は、FPU非搭載MCUを用いていたので、固定小数点のレガシーコードが残っている場合がありますのでご注意ください。