mtasc でつくった swf 上での計算があんまり遅かったので、ベンチマークしてみた。
Math オブジェクト内にある三角関数や指数関数を、十万回ずつ呼んでみた。
まずは結果。有効数字は二桁弱。:
- IE6(JScript) : 1500ミリ秒
- Firefox(JavaScript) : 2297ミリ秒
- IE6+Flash Player 6,0,79,0 : 5438ミリ秒
- IE6+Flash Player 7,0,19,0 : 4157ミリ秒
- Firefox+Flash Player 7,0,19,0 : 4266ミリ秒
- ruby 1.8.2 / i386-mswin32 : 1468ミリ秒 (参考)
Flash Player 6 を試すことができたのは、たまたま最新じゃなかったから。ちょっとラッキー。
でももう最新にしてしまった。
結果を見てみると。
IE+FP7 と Firefox+FP7 の差は、誤差程度。やはりブラウザには依存しない。
IE Firefox FP7 の順なのはまあまあ予想の範囲内だが、FP7 の遅さが際だっている。あんまり計算させるとかわいそうかも。
書き方を知らないし処理系が手元にないので今はやれないが、Adobe SVG でも試したい。
ちなみに、こんな計算をした:
function c() { var d = 0; for( var i=1 ; i<100000 ; ++i ){ d += Math.sin(i); d += Math.cos(i); d += Math.asin(1/i); d += Math.acos(1/i); d += Math.sqrt(i) d += Math.atan2(i,1); d += Math.exp( -Math.abs( Math.tan(i) ) ); d += Math.log(i); } return d; }
ちなみにちなみに、計算結果は 22486688.3040。これより下の桁では処理系によって差があったりした。