
ラジアンより効率的な「ターン」表現
三角関数のコード最適化において、ラジアンではなく「ターン」([0,1] の範囲で円を表現する方法)を使用する方が計算効率が良いと、Computer, Enhance! が2022年9月26日に論じた。多くのコードベースが不要に pi や tau を乗算してから三角関数を呼び出し、ライブラリ実装がすぐに除算し直しているという非効率性を指摘している。
現在のラジアン表現の問題点
多くのプログラムは三角関数を呼び出す前に角度に pi または tau を乗算している。例えば Godot Engine のコードベースでは、周期的な値に tau を乗算してから sin を呼び出しており、AVX2 実装の sin は入力に定数 1.27323954473516(4/pi に相当)を乗算している。このアプローチでは、呼び出し側が pi を乗算し、ライブラリ側がそれを除算するという不要な計算が発生している。
CUDA の sincospi 組み込み関数も入力に pi を乗算した値の正弦と余弦を計算するように設計されており、この非効率性が広く浸透していることが分かる。

ターン表現による効率化
ターン表現では、0 が 0 度、0.25 が 90 度、0.5 が 180 度、0.75 が 270 度、1 が 360 度、2 が 720 度に対応する。この [0,1] の正規化範囲を使用することで、三角関数に直接渡すだけで計算が完結し、余分な乗算や除算が不要になる。
最適化により、pi(3.14159...)や tau(6.28318...)の定数乗算を削除できることで、計算量が削減される。特に大規模なコードベースではこの最適化の効果が顕著になる。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
Computer, Enhance!, "Turns are Better than Radians", https://www.computerenhance.com/p/turns-are-better-than-radians
筆者の見立て
- tau への置き換えではなく、ほとんどの場合 pi を完全に削除することが可能だと解釈している
- プログラマーが最初からラジアンではなく [0,1] のドメインを使用することに合意していれば、双方の作業がより簡潔になる可能性を示唆している
- [0,1] の範囲はラジアンよりも計算効率が良いだけでなく、一般的な値を表現する際により簡潔で正確であると論じている
- ターンまたはハーフターンへの切り替えはたいていコード削除の問題であり、それ以上のことはないと予想している