概要
π(パイ)やτ(タウ)を使うよりも、そもそも不要にできるケースが多い 多くのコードはπやτでラジアン変換し、すぐに逆変換している [0,1]のターン(turns)表現が計算効率・精度ともに優れる sinやcosの引数をラジアンからターンに切り替えるだけで多くの問題が解決 既存の数学ライブラリでもターンやハーフターンをサポートしているものがある
πやτの置き換えより「削除」が有効な理由
-
πやτは多くの場合、角度変換のためだけに使われている
-
ほとんどのコードでは、値h(0~1の周期的な値)をsinやcosの入力に使う際、無意味にπやτで変換
-
数学ライブラリ側でも、入力値を内部で4/πなどの定数で再変換している
-
結果として、πやτで変換→すぐ逆変換という無駄な計算が発生
- 例:sin(h * 2 * π) → ライブラリ内部でy = (4 / π) * x
-
この無駄を排除し、[0,1]のターン表現をそのまま使うことで計算が簡潔に
[0,1]ターン表現の利点
- 0が0度、0.25が90度、0.5が180度、1が360度という直感的な表現
- 90度=0.25のように、2進数で正確に表現できる角度が多い
- ラジアンでは90度=π/2であり、どれだけビット数を増やしても正確には表せない
- [0,1]ターンは計算効率が高く、典型的な値の精度も高い
ターン(turns)やハーフターン(half-turns)への切り替え方法
-
sinやcos関数の引数をラジアンからターンに変更するだけでOK
-
既存コードとの互換性が必要なら、新しい関数名でターン版を用意し、旧関数は内部で変換
-
ターン以外にも[0,2]のハーフターン(full circleが2)を使う方法もあり
-
CUDAのsincospiのように、π倍で計算する関数も既に存在
- これらを活用すればπやτを使わずに済む
心理的ハードルと数学的正当性
- 「ラジアンを使わないのは間違い」という先入観は不要
- ターンは数学的にも正式な表現であり、既に定義されている
- 0が0度、0.5が180度、1が360度という明快な対応関係
実際の運用例とメリット
- 実際にラジアンを排除したコードベースでは、πやτが消え、可読性・保守性が向上
- sinやcosだけでなく、他の三角関数も同様にターン対応にできる
- 多くの数学ライブラリは内部でラジアン変換を行っているため、ターンやハーフターンへの切り替えは簡単
- πやτを使わないことで、計算の無駄と誤差が減る
まとめ
- πやτを置き換えるより「削除」する方が効果的
- [0,1]ターンや[0,2]ハーフターンで角度を扱うことで、計算効率と精度が向上
- 既存の数学ライブラリやプラットフォームでもサポートが進んでいる
- 心理的な抵抗を捨て、より合理的な角度表現へ移行するメリット