2023年3月23日木曜日

ああ、アホかと

昨日の固定小数点のmbasicのプログラムが間違っていた。

数値の積を出すときに3bitずつシフトする計算にしていたけど5bitずつだと思う。

6:10で表現すると1は1024で2は2048になり各々32で割ると32と64になるので掛けると 2048となり正しくなる

これで求め直すと下図を得た

割と良いのでは?
プログラムはこんな風ですね。(無事debugできた)



ちょっと実機(cpm8266)で試してみよう。
結果は3分49秒で素直に浮動小数計算をしたよりもかなり遅い。
やはり乗算前に小数点を補正するためにシフトでなく割り算の命令が4行も増えたこととdevide by zeroのエラーを避けるためにその各行がifで場合分けしてるのが重くのしかかっていると思う。c言語みたく素直な符号付右シフトがあれば速くなると思うんだけど・・・

で、hitech-cでやってみた。
最初はwondows 11の上でcpmコマンドでコンパイルして実行。
ちょっといびつで上下が非対称になっているけどそれが固定小数での誤差の味と思おう。
因みにmbasicとの違いはhitech-cのintが32bitなので6:26の固定小数点で計算しているため精度がかなり違う。もちろん同じ実行ファイルなら環境が変わっても答えは同じ。
cpm8266でやってみたら。当然ながら同じ結果を得た。
実行時間は12.2秒でhitech-cで浮動小数計算を使った版の3.6倍になりました。(ただし画面は似てるけどmbasicとは非なるモノなのでそこは愛嬌で・・)

一応、それなりに満足できる結果を得たのでこの話題はとりあえず終了。
次なる遊びを考えることにする。さて次は何をするかな?

0 件のコメント:

コメントを投稿

月日が経つのは・・・

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