もっと低コストなMath.sin
Math.sin()を毎回計算するよりも、
あらかじめ変換テーブルを作っておいて、近似値を参照する方が、
精度はちょっと劣りつつも、早ささの面で使えるかもしれない。
ブラシュアップ。
index値の求め方を変更した_a1bを追加。
len/(Math.PI*2)を定数としてあらかじめ計算しておく。
(ran[i]%PI2)*LENdivPI2 & len2
もっとブラシュアップ
index値の求め方を変更した_a1cを追加。
ran[i]*LENdivPI2 & len2
「ran[i]*LENdivPI2」の値が、計算範囲内であることを前提のブラシュアップ
超えるようであれば、(ran[i]%PI2)をする。
クラス化してみた。
====以下結果例====
◆Math.sin()を計算するより、変換テーブルを作って参照した方が精度は劣るが早い。
Sin(0)〜Sin(2*Math.PI)を65536段階で、sinTable:Vector.<Number>に入れる。
変換テーブルの作成時間:60
_a0:183:普通にMath.sinで計算。
_a1c:28:sinTableを参照もっとブラシュアップ版
_a2c:113:sinTableの参照もっとブラシュアップ版を関数化
_a2d:116:sinTableの参照もっとブラシュアップ版をクラス化
_a99:92:対照用に0を返すだけの関数
試しに20個、Math.sinとsinTableで求めた値との比較をする。
0.000011295614069428694
0.000018468081231148327
-0.000048742107041879756
0.00006136495014702481
-0.000005346027467822978
0.00008947552124638491
-0.00003862500423407189
-0.000013733251637670918
-0.00005233214434591238
-0.000009970360831168534
-0.00005403697863781698
0.000026028611143202873
0.000004722851165483988
-0.0000010851409804057965
0.000
- forked:1
- favorite:7
- lines:108
- license : MIT License
- modified : 2009-07-12 01:03:24
coppieee
:
もしかしたらお世話になるかも。
yonatan
:
Math.sin lookup table
ton
:
Math.sinを軽くする方法!


