나는 빛 전송의 수치 시뮬레이션, 리눅스, C++ 11에서 경로 추적을 쓰고 있어요 그리고 난 결국 실행 중에 발생할 수있는 수치 오류 잡기 위해 디버그특정 C++ 11 코드 세그먼트에 대해서만 SIGFPE 생성을 {활성화 | 비활성화} 할 수 있습니까?
#include <fenv.h>
...
feenableexcept(FE_INVALID |
FE_DIVBYZERO |
FE_OVERFLOW |
FE_UNDERFLOW);
을 사용하고 있습니다 .
코드의 일부 지점에서 축 정렬 경계 상자 (AABB)에 대한 광선 (선분)의 교차를 계산해야합니다. 이 계산에서는 IEEE 754 표준에 설명 된 몇 가지 특수 값 (예 : NaN 및 inf)의 생성에 의존하는 매우 최적화 된 강력한 ray-box intersection algorithm을 사용하고 있습니다. 분명히,이 광선 - 박스 교차 루틴에 의해 특별히 생성 된 부동 소수점 예외를 포착하는 것에는 관심이 없습니다.
따라서, 제 질문은 :
- 가 (즉, 선 박스 교차 코드 섹션) 코드의 일부 부분에 대해 부동 소수점 예외 신호 (SIGFPE)의 발생을 중지시킬 수 있는가?
- 시뮬레이션을 계산할 때 우리는 매우 성능에 대해 우려하고 있습니다. 특정 코드 섹션에 대해서만 예외 신호를 억제 할 수있는 경우 컴파일 시간이 (즉, 세대 동안 코드를 인스트루먼트/디 인스트루먼트함으로써 값 비싼 함수 호출을 피할 수 있음)에서 수행 할 수 있습니까?
도움 주셔서 감사합니다!
다른 코드에서 부동 소수점 트래핑을 설정 하시겠습니까? 부동 소수점 트래핑은 일반적으로 기본적으로 비활성화되어 있습니다.이 경우에는 경로 추적 코드에서 이미 해제되어 있으므로 다른 코드에서 부동 소수점 트래핑을 특별히 필요로하지 않는 한 다른 코드에 대해서는이 기능을 켜지 않아도됩니다. –
@EricPostpischil 현재 전체 코드에 대해 부동 소수점 트래핑을 설정했습니다 (코드에서 발췌 한 코드를 사용하여). 내가하고 싶은 것은 특정 코드 섹션을 제외하고 전체 코드에 대해 부동 소수점 트래핑을 사용하도록 설정하는 것입니다. –