ダブルの逆平方根を見つけるとき、0.0またはMIN_DBLで無効な非正の入力をクランプする方が良いですか? (以下の私の例でdouble b
は、浮動小数点の丸め誤差と、ゲーム内で物理法則がわずかに曖昧であるために、負になる可能性があります。)
0.0による除算とMIN_DBLはどちらも、ゲームで同じ結果を生成します。これは1/0.0
、と1/DBL_MIN
が事実上無限であるためです。私の直感では、MIN_DBLの方が適していると言われていますが、0.0を使用する場合はありますか?おそらくのようsqrt(0.0)
に、そしてそれらは特殊なケースであるため1/0.0
、乗算はより速く実行されます。1.#INF000000000000
double b = 1 - v.length_squared()/(c*c);
#ifdef CLAMP_BY_0
if (b < 0.0) b = 0.0;
#endif
#ifdef CLAMP_BY_DBL_MIN
if (b <= 0.0) b = DBL_MIN;
#endif
double lorentz_factor = 1/sqrt(b);
MSVCでの二重除算:
1 / 0.0 = 1.#INF000000000000 1 / DBL_MIN = 4.4942328371557898e + 307