2023年3月19日日曜日

cpm8266 他の言語でもasciiartしてみた

 前の投稿であげたretroPC界の基本ベンチマークともいうべきasciiartのソースプログラムはこちらで紹介されている。ソースは著作権的にどんな扱いか不明なので一応リンクだけ
http://haserin09.la.coocan.jp/Images/asciiart_0.gif

実行結果は前の投稿で示してある。まあ文字通りキャラクタでmandelbrot集合を描いたもの。
cpm8266のcp/mのmbasic85で実行した結果が2分40秒。
microsoftのBasicCompilerであるBASCOMでコンパイルしたオブジェクトで実行すると1分10秒で約2.3倍の高速化。 当然結果も同じ。

これをturbo pascalにポーティングしたソースが下記

program asciiart;
var x,y : integer;
         i : integer;
   ca,cb,  a,b,t : real;
 begin
   for y:=-12 to 12 do begin
      for x:=-39 to 39 do begin
         ca:=x*0.0458;
         cb:=y*0.083333;
         a:=ca;
         b:=cb;
         i:=-1;
         repeat
           i:=i+1;
           t:=a*a-b*b+ca;
           b:=2*a*b+cb;
           a:=t;
         until ((a*a+b*b)>4.0) or (i>15);
         if i=16 then write(' ')
                   else begin
                          if i>9 then i:=i+7;
                          write(chr(i+48));
                 end;
     end;
     writeln;
   end;
end.

そしてこれをコンパイルして実行してみた結果がこちら(macのターミナルのscreen)

ちょっと見てみるとわかるけど1行目の中ほどの7Aの後に空白(=収束しない)ができている。
turbo pascalのfloat変数は6byte,mbasicのそれは4byteと精度が異なるので結果が異なることがあるようだ。また変数のサイズが大きいせいかBASCOMほど高速化せず実行結果は1分40秒とmbasicの1.6倍にとどまる。
次はc言語でやってみたい。

無理くりpascalのソースを貼って整形したらブログのソースがタグまみれになって文字サイズが途中変ですね。

0 件のコメント:

コメントを投稿

月日が経つのは・・・

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