前の投稿であげた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.
ちょっと見てみるとわかるけど1行目の中ほどの7Aの後に空白(=収束しない)ができている。
turbo pascalのfloat変数は6byte,mbasicのそれは4byteと精度が異なるので結果が異なることがあるようだ。また変数のサイズが大きいせいかBASCOMほど高速化せず実行結果は1分40秒とmbasicの1.6倍にとどまる。
次はc言語でやってみたい。
無理くりpascalのソースを貼って整形したらブログのソースがタグまみれになって文字サイズが途中変ですね。
0 件のコメント:
コメントを投稿