Numeric_Limits :: has_infinity가 false 인 경우 권장 해결 방법은 무엇입니까?
문제
Linux의 C ++ 앱에서 Infinity의 이중 값을 확인해야합니다. 대부분의 플랫폼에서 이것은 비교하여 작동합니다 std::numeric_limits<double>::infinity()
. 그러나 일부 기존 플랫폼 (예 : GCC 3.2.2)에서는 사용할 수 없으며 std::numeric_limits<double>::has_infinity
거기에 거짓입니다.
해당 플랫폼에 어떤 해결 방법을 추천 하시겠습니까?
해결책 3
좋아, 나는 이제 그것을 사용하는 것에 의지했다 INFINITY
그리고 NAN
해당 특정 기계의 매크로는 잘 작동하는 것 같습니다. 그들은 왔습니다 math.h
.
다른 팁
IEEE 754 산술을 사용하는 경우 거의 확실히 무한대는 잘 정의 된 값이며 모든 산술 작업에 대한 결과를 정의했습니다. 특히,
infinity - infinity = NaN
긍정적이고 부정적인 무한대 NaN
값은 이것이 사실 인 유일한 값입니다. Nans는 기능의 도메인 오류를 나타내는 데 사용되는 특별한 "Not-Number"값입니다. sqrt(-1)
. 또한:
NaN != NaN
NaN
S는 이것이 사실 인 유일한 값입니다.
그러므로:
bool is_infinite(double x) {
double y = x - x;
return x == x && y != y;
}
경우에만 참으로 반환됩니다 x
긍정적이거나 부정적인 무한대입니다. 테스트를 추가하십시오 x > 0
긍정적 인 무한대 만 확인하고 싶다면.
대부분의 경우 std :: numeric_limits :: max ()는 std :: numeric_limits :: infinity ()를 유효한 대체품 일 수 있습니다.
그러나 사용에 대해 더 조심해야합니다. 오버 플로우를 사용하면 오버플로가 감지되면 오버플로를 수동으로 감지하고 결과를 MAX에 명시 적으로 설정해야한다고 생각합니다.