当找到双倍的平方根时,最好在0.0或MIN_DBL处将无效的非正输入钳位?由0.0(在下面double b
我的例子可能最终由于浮点舍入误差和由于物理定律稍微稍微在游戏捏造为负。)C++双除0.0与DBL_MIN的比较
两个分裂和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