固定小数点って?

さて、aki-H8 3664Fは、単精度浮動小数点演算ができますが

計算に時間が掛かり過ぎます。

例えば

単精度浮動小数点同士の加算1回で、268ステート要します。

http://www.renesas.com/jpn/products/mpumcu/16bit/tiny/application_note/ADJ-502-127/ADJ-502-127.pdf

1ステートとは、CPUのシステムクロックの立ち上がりから、次の立ち上がりまでを言いますから

H8/3664Fは、16MHz動作だと、

MATH

ですから、

MATH

これを、

例えば、60回繰り返すと

 

MATH

MATH

ですので、単純に考えて、1KHz以下の周波数の入力でないと、計算できないと思います。

 

 

1.固定小数点とは何物?

 

小数点を、どこに打つかは、自分で決めるようです。

 

例1

8ビットの場合

X=127=(B'0111 111)

このXの7ビット目(MSB)と、6ビット目の間に小数点を打つとすれば

 

この行為は、Xを128(2^7)で割ることに等しい。

 

ですので

 

MATH

 

ですから

MATH

    ある数xH(3)=ある数x MATH

 

 

Q7だと

X(=127)は、MATHと言う数字を表しています。

ですので、

FIRフィルタの係数H(3)が、Q0で表現して

MATH

と、表示されたら

 

これをQ7で表示しようとすれば

 

H(3)をMATH

これを四捨五入して、整数で表すと、Q7では、H(3)=1となります。

 

Q8では2 MATH

Q8で、H(3)=1.

 

Q16では2 MATH

ですので

Q16で H(3)=305

です。

 

このように、整数同士の掛け算にするのです。

計算の結果が出た時に、それを、それぞれ掛けた数で割って置くと、

元の数H(3)を、掛けたのと、ほぼ、同じ数字になりますよね。

 

    ある数xH(3)=ある数x MATH

 

MATH 符号付16ビット乗算)

 

これを、さっきと同じで、60回繰り返すと

 

24MATH

最後に2MATH

合計

1440+32=1472ステート

1472ステート=1472MATH

と、単精度浮動小数点計算に比べ、10倍以上のスピードアップになります。

積和だと59回足す訳ですから

 

和(32ビット足し算 ADD.L ERs,ERd =2ステート)も考慮すると

 

1472+2x59=1590ステート

 

1590ステート=1590MATH

(*レジスタに、メモリーの内容をもって来る事は、今は、考慮していません)

 

H8(3664F)で、重い計算をさせて、これですから、

実際は(D/Aは8ビット出力ですから)、もっと、計算に要する時間は少ないはずですね。

 

2.負の数の表現は、どうなっとんの?

 

原理が、なかなか、解りませんでした。

例によって、検索しまくり、よいサイトを発見しました。

本当に初心者の人に捧げるコンピューター入門

この場にて、御礼申し上げます。

 

骨子は

X+Y=0

なら

マイナスY=X だ!

 

8ビットで考えます。

 

255+1=0

ですね。

だから

 

    -1=255(B'1111 1111)

 

ほんまに、うまい! 拍手っ! ぱちぱちぱち。

 

254+2=0

   -2=254(B'1111 1110)

以下

 

MATH

こんな風になりますから、

MATHは、-128の事と、決めておけば

8ビットでは、負の数は、-1〜-128、正の数は 127〜0 (ゼロも入れました。)の範囲になりますよね。

そんで、

    固定小数点との関係 なんですが

先ほどのQ7だと、

-128(B'10000000)を2MATH

 

    -128x2MATH

ですから、Q7では

 

MATH

の、関係になります。

ですので

8ビットの場合

小数点以下の部分は、0.0078125刻みです。

16ビットだと、もっと細かくできますね...

H.15.9.22

This document created by Scientific Notebook 4.1. この文書は次の製品で作成しました Scientific Notebook 4.1.