Numeric_Limits :: has_infinity가 false 인 경우 권장 해결 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/447520

문제

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

NaNS는 이것이 사실 인 유일한 값입니다.

그러므로:

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에 명시 적으로 설정해야한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top