🔢

sin(angle * PI / 180) は問題がある

2023/01/23に公開

sin(180 * PI/ 180) としてもゼロにならぬ...
cos も同等.

https://stackoverflow.com/questions/6566512/value-of-sine-180-is-coming-out-as-1-22465e-16

精度とかの問題でした.

https://stackoverflow.com/questions/42792939/implementation-of-sinpi-and-cospi-using-standard-c-math-library

45 度

また, cos(radian(45)) != sin(radian(45)) になります(1 bit 違う). これは quaternion で 90 * n 度の回転行列を作るときに問題となります

https://github.com/PixarAnimationStudios/USD/issues/2136

のように epsion が紛れ込んでしまいます.

解決方法

boost sin_pi, cos_pi や, macOS であれば vvsinpi あたりを使います!

boost だと 45 のときもうまく計算してくれました(ソースコードを見る限り double の場合は double 精度で計算しているように見えるが, 一旦多倍長精度に格上げしているかも)

x86 ですと x87 で sin/cos 計算する手もあるかもしれません.

ポータブルを求めるなら自前実装でしょうか.

Discussion