문제

계산의 어느 단계에서나 전파 될 수 있기 때문에 NAN의 기원을 찾기가 종종 어렵습니다. 계산이 NAN 또는 INF를 반환 할 때 C ++ 프로그램을 중단 할 수 있습니까? 내 생각에 가장 좋은 것은 좋은 오류 메시지와 함께 충돌하는 것입니다.

Foo: NaN encoutered at Foo.c:624

이와 같은 것이 가능합니까? 더 나은 솔루션이 있습니까? NAN 문제를 어떻게 디버그합니까?

편집 : 정밀도 : Linux에서 GCC와 함께 일하고 있습니다.

도움이 되었습니까?

해결책

완전 휴대용 방식으로 수행 할 수는 없지만 많은 플랫폼은 CAPI를 제공하여 부동 소수점 상태 제어 레지스터에 액세스 할 수 있습니다.

구체적으로, 당신은 오버플로 및 유효하지 않은 부동 소수점 예외를 마스킹하려고합니다. 이로 인해 프로그램의 산술이 NAN 또는 무한대 결과를 생성 할 때 프로세서가 예외를 알릴 수 있습니다.

Linux 시스템에서는 다음과 같은 트릭을 수행해야합니다.

#include <fenv.h> 
...
feenableexcept(FE_INVALID | FE_OVERFLOW);

진단 메시지를 인쇄하거나 이러한 예외 중 하나가 신호를받을 때 계속 실행할 수 있도록 트랩 핸들러를 작성하는 법을 배우고 싶을 수도 있습니다.

다른 팁

예! NAN 또는 Infinite가 발생할 때 인터럽트를 생성하기 위해 IEEE 754 호환 프로세서를 설정 (아마도 포용 적으로) 설정하십시오.

나는 검색하고 발견했다 이 슬라이드, 시작입니다. 5 페이지의 슬라이드에는 필요한 모든 정보가 요약되어 있습니다.

나는 C 전문가가 아니지만 대답은 아니오라고 기대합니다.

  1. 이 점검을 위해 모든 플로트 계산이 필요합니다. 큰 성능 영향.
  2. Nan과 Inf는 악하지 않습니다. 앱이 사용하는 일부 라이브러리에서 합법적으로 사용될 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top