double의 역 제곱근을 찾을 때 유효하지 않은 양수가 아닌 입력을 0.0 또는 MIN_DBL로 클램프하는 것이 더 좋습니까?0.0으로DBL_MIN 대 0.0 C++ 이중 나눗셈
두 부문 (double b
아래 내 예. 인해 약간 약간 게임은 과장되어 물리 법칙 부동 소수점 반올림 오류 때문 제외 끝나게 월) 및 MIN_DBL는 동일한 결과를 생성 1/0.0
과 1/DBL_MIN
이 사실상 무한대이기 때문에 게임. 나의 직감은 MIN_DBL이 더 나은 선택이라고 말하지만, 0.0을 사용하는 모든 경우가 있을까요? 아마도 sqrt(0.0)
과 마찬가지로 1/0.0
과 1.#INF000000000000
의 곱셈은 특별한 경우이기 때문에 더 빠르게 실행됩니다. MSVC에서
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);
두 부문 :이
1/0.0 = 1.#INF000000000000 1/DBL_MIN = 4.4942328371557898e+307