プロジェクトオイラー
http://projecteuler.net/index.php?section=problems&id=177
意外なトラップが。
角度を求めるのにasinを使ったのだが、
asin(1.0) = π / 2
となるところが、大きく値がずれて、10-9のトレランス内に入らずに整数の角度の組から落ちていた。
sin(π/2 - x) = cos(x) = 1 - x2/2 + ...
だから、逆関数は、
asin(1-x) = π/2 - √2x1/2 + ...
となる。
IEEE754の倍精度で表される1より小さい最大の数値は、
1 - 2-53
だが、
&pi / 2 - asin(1-2-53) = 1.49011611938e-08
となる。
逆に、1より大きい最小の数値は、
1 + 2-52
だが、これをasinに代入すると、
ValueError: math domain error
となる。
このように、逆三角関数の扱いはデリケートにされなければならない。