當找到雙倍的平方根時,最好在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