浮動小数点数の算術関数の使い方


【概要】

マイクロチップ社の提供している浮動小数用算術ライブラリの使い方の
説明をします。
マイクロチップ社の四則演算のある浮動小数算術ライブラリは、AN575と
なりますので、これをベースにして説明していきます。
このAN575にはPIC16用とPIC17用の関数がそれぞれ含まれていますが
ここでは、PIC16シリーズ用で説明していきます。

【内蔵関数】

AN575に含まれているPIC16シリーズ用算術関数は下記となっています。

関数名 機能
24ビット用 FLO1624 16ビット整数を24ビット浮動小数に変換
NRM2424 24ビット浮動小数の正規化
NRM3224 24ビット浮動小数を32ビットに正規化
FLO2424 24ビット整数を24ビット浮動小数に変換
INT2416 24ビット浮動小数を16ビット整数に変換
INT2424 24ビット浮動小数を24ビット整数に変換
FPA24 24ビット浮動小数 加算
FPS24 24ビット浮動小数 減算
FPM24 24ビット浮動小数 乗算
FPD24 24ビット浮動小数 除算
32ビット用 FLO2432 24ビット整数を32ビット浮動小数に変換
NRM3232 32ビット浮動小数の正規化
FLO3232 32ビット整数を32ビット浮動小数に変換
NRM4032 40ビット浮動小数を32ビットに正規化
INT3224 32ビット浮動小数を24ビット整数に変換
INT3232 32ビット浮動小数を32ビット整数に変換
FPA32 32ビット浮動小数 加算
FPS32 32ビット浮動小数 減算
FPM32 32ビット浮動小数 乗算
FPD32 32ビット浮動小数 除算



【使用変数領域と表現】

本ライブラリでは浮動小数を下記フォーマットで表現しています。

(1) 24ビットの場合
 下記のような3バイトでメモリに格納されます。引数エリアとして2つが
 確保されていて、この2数との間の演算となり、結果はA側に格納されます。
          指数部     仮数部上位   仮数部下位
  形式     xxxx xxxx  s.xxx xxxx  xxxx xxxx
  引数A     AEXP    AARGB0    AARGB1
  引数B     BEXP    BARGB0    BARGB1 

(2) 32ビットの場合
  下記のような4バイトでメモリに格納されます。 引数エリアとして2つが
  確保されていて、この2数との間の演算となり、結果はA側に格納されます。
          指数部     仮数部上位   仮数部中位  仮数部下位
  形式     xxxx xxxx  s.xxx xxxx  xxxx xxxx  xxxx xxxx
  引数A     AEXP    AARGB0    AARGB1   AARGB2
  引数B     BEXP    BARGB0    BARGB1   BARGB2


【基本的な使い方】

この浮動小数の算術ライブラリを使うときには、次のようにします。

例えば、24ビット浮動小数を使うものとし、y = ax+b の計算をするものと
します。ここで、x、yは16ビットの整数値とし、a,bが実数で小数点が
付いた定数であるものとします。

《例題》 y=1.54x + 150 の計算をする。ただしx、yは16ビット整数

  この例題では次のように関数を使います。

  ・16ビット整数xを引数Aにセット(AARGB0とAARGB1に保存)
      ↓
  ・16ビット整数xを浮動小数に変換 引数Aに保存 → CALL FLO1624
      ↓
  ・1.54という定数を引数Bにセット
      ↓
  ・1.54×xを計算 結果は引数Aに保存  → CALL FPM24
      ↓
  ・定数150を引数Bにセット
      ↓
  ・y=1.54x+150を計算 結果yは引数Aに保存  → CALL FPA24
      ↓
  ・yを16ビットバイナリに変換 結果yは引数Aに保存  → CALL INT2416
     (AARGB0とAARGB1に格納されている)

これで上記の式の計算をすることができます。


【簡単に浮動小数を求める】

定数や式の計算結果の整数値から浮動小数を、簡単に求めるには、C言語を
使います。
ちょっと反則技ではありますが、どうしてもアセンブラで書かなければならない
とき、ちょっとCコンパイラの力を借りると簡単に浮動小数が求められます。
アセンブラで定数を浮動小数で設定しなければならないとき、Cコンパイラで
求めてから、アセンブラで記述すれば簡単に定数が記述できます。

まず下記のようなプログラムを作成しコンパイルします。そして下図のように
ブレークポイントをプログラムの繰り返し部に設定してからシミュレーションで
実行します。
こうすると1回の実行毎にプログラムは停止しますから、そのときのFile Register
の内容をみれば、浮動小数値がわかります。





このプログラムのFile Registerは下図のように配置されますので
ここに表示された値から個々の数値に対する浮動小数を求めることができます。







  




  目次ページに戻る