2023年3月23日木曜日

浮動小数で遅いなら固定小数でやるため欲しい範囲を調べてみた。

 サイズ4byteの浮動小数の演算で遅いなら8bitcpu(=z80)でも固定小数ならどうかなって考えたら気になって16bitの掛け算の計算がそこそこ速いならあとは右シフトとか前もっての各定数の計算なので割と高速化できないかと思って例のasciiartの計算で発散時の整数部がどれほどになるかを調べてみた。ソースは元のbasicにちょっと手を加えて以下

これでmxが最大いくつかわかるはず
36は結構厳しい値。2のべき乗で整数部を決めるとすると
32<=36<=64 だから6bitも必要になる。16bitで計算しようと思うと小数部が10bitしか取れない。0.001も正確には出せないってことになる。
でもそこは我慢して6:10の固定小数点計算でasciiartを計算するプログラムをmbasicで書くとして定数を求める。

まず0.0458≒0.0449(6:10で46)で様子を見る。
次に0.08333≒0.08300(6:10で85)とする。
最後に発散を見る4は4096で良し。掛け算をする前に掛ける2つの数字を各3bit分右シフトすることになるので8で割れば良いと思う。
これで良いと思って書き換えたのが下記

残念なことに90行の2*AA*BBでオーバーフローしてしまうのでさらに制度が落ちるけど実験なので8:8で小数の分解能1/256でやってみる。
本来の結果を再掲すると下図

かなり精度が落ちて形が崩れているのがわかる。

道は遠い、今一歩力及ばす。がんば 俺!

0 件のコメント:

コメントを投稿

月日が経つのは・・・

 姉妹Blog共々、7月の更新を忘れてました。 ちょっと色々あって古代電脳というか手続き型のプログラミングへの熱意が薄れてこのブログをどうするか考えてしまってます。 日々、いじればまた関心も高まると思うのでちょっと冷却期間に入ります。