浮動小数点と固定小数点

この投稿では、浮動小数点と固定小数点について説明します。

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を用いていたので、固定小数点のレガシーコードが残っている場合がありますのでご注意ください。

OSS-ECAL Japanese
error: コンテンツは保護されている