🔢
sin(angle * PI / 180) は問題がある
sin(180 * PI/ 180) としてもゼロにならぬ...
cos も同等.
精度とかの問題でした.
45 度
また, cos(radian(45)) != sin(radian(45)) になります(1 bit 違う). これは quaternion で 90 * n 度の回転行列を作るときに問題となります
のように epsion が紛れ込んでしまいます.
解決方法
boost sin_pi, cos_pi や, macOS であれば vvsinpi あたりを使います!
boost だと 45 のときもうまく計算してくれました(ソースコードを見る限り double の場合は double 精度で計算しているように見えるが, 一旦多倍長精度に格上げしているかも)
x86 ですと x87 で sin/cos 計算する手もあるかもしれません.
ポータブルを求めるなら自前実装でしょうか.
Discussion