内積はクランプしたほうがいい

結論

内積を関数の入力にする場合はクランプした方がいい。

理由

正規化済みの内積であっても、計算誤差によっては絶対値が1を超える場合があるのでクランプしたほうが良いです。

例えば内積からAcosを取る場合

// a, bは正規化済みのベクトルとする
Vector3 a, b;
float dot = Vector3.Dot(a, b);
float rad = Mathf.Acos(dot);

Mathf.Acos()は1より大きく、-1より小さい値が入力された場合はNaNを返すので、結果がNaNになる場合があります。

なので、Clampで-1から1の範囲にしたほうが良い。

// a, bは正規化済みのベクトルとする
Vector3 a, b;
float dot = Mathf.Clamp(Vector3.Dot(a, b), -1f, 1f);
float rad = Mathf.Acos(dot);

なんかNaNになるなと思ったら、こんなところで引っかかってましたとさ。