actionscriptの三角関数使用時の注意
Math.cos( Math.PI / 2 ); Math.sin( Math.PI ); Math.tan( Math.PI );
上記は数学的には0のはずなのに、ationscriptでは0になりません。
EX:下記のコードを実行してみましょう。
trace("cos : "+Math.cos( Math.PI / 2 )+"\nsin: "+Math.sin( Math.PI )+"\ntan: "+Math.tan( Math.PI ));
//結果 cos : 6.12303176911189e-017 sin: 1.22460635382238e-016 tan: -1.22460635382238e-016
Math.cos(),sin(),tan()などは、角度*Math.PI / 180でラジアンを算出し、ベクトルの計算をする時なんかによく使用しますよね。
この現象に対して、psyark.jp、keyさんが実験しています。
三角関数の誤差疑惑
原因は計算誤差でした。さもあろう。 trace((Math.PI * 4.5) % Math.PI == Math.PI / 2); // true trace((Math.PI * 5.5) % Math.PI == Math.PI / 2); // false
三角関数に限らず、浮動小数点数と一点の整数とを比べるのは危険なようです。
if(Math.cos(radian)==0)とかは怖くてできないですね…