내 프로그램에서 대기 시간 요구 사항이 발생하여 -Ofast
gcc 옵션을 사용하고 있습니다. 나는 기본 플래그와 -Ofast 그것을 실행하려고했습니다gcc - 전체 제한 목록
#include <iostream>
#include <math.h>
static double quiet_NaN = std::numeric_limits<double>::quiet_NaN();
int main()
{
double newValue = 130000;
double curValue = quiet_NaN;
printf("newValue = %f\n", newValue);
printf("curValue = %f\n", curValue);
printf("isnan(newValue) = %d\n", isnan(newValue));
printf("isnan(curValue) = %d\n", isnan(curValue));
printf("newValue == curValue %d\n", (newValue == curValue));
printf("newValue != curValue %d\n", (newValue != curValue));
}
:
$ g++ TestPointer.cpp
$./a.out
newValue = 130000.000000
curValue = nan
isnan(newValue) = 0
isnan(curValue) = 1
newValue == curValue 0
newValue != curValue 1
$ g++ -Ofast TestPointer.cpp
$ ./a.out
newValue = 130000.000000
curValue = nan
isnan(newValue) = 0
isnan(curValue) = 1
newValue == curValue 1
newValue != curValue 0
그래서
!=
및
==
의 결과가 신뢰할 수없는 나는 간단한 테스트 프로그램을 썼습니다. 그것은 두 값이 난이 아닌 것으로 알려진 경우에만
==
과
!=
을 사용해야한다는 것을 의미합니까? 그렇지 않으면 전에
isnan
으로 테스트해야합니까?
-Ofast
으로 isnan
이 올바르게 작동하는지 확인합니까? -Ofast
을 사용하면 ==
과 !=
이 올바르게 작동합니까? 누군가가 -Ofast
에 의해 추가 된 전체 제한 목록을 제공 할 수 있습니까?
왜 처음에는 -Ofast를 사용하고 있습니까? 그 의사를 읽었 니? 그것은 -O3 -Fast-Math와 동일합니다. -Fast-Math는 float/double이 빠르면 잘못된 결과를 줄지도 모른다는 것을 의미합니다. –