4
저는 코드에서 부동 소수점 동일성 비교를 수행하는 것과 관련된 문제에 다소 익숙합니다.Wfloat-equal 옵션을 사용하여 부동 소수점을 1 또는 0으로 비교
은 현재 내가 에 컴파일하고있어 코드베이스 (GCC를 연타)은 다음과 같은 옵션을 사용할 수 있습니다 :
:-Wfloat - 동일 그리고 코드베이스에서 다음 예제 비교가있다 다음과 같이
template <typename FloatType>
void foo(FloatType v) {
if (v == FloatType(1)) {
...
}
else if (v == FloatType(0)) {
....
}
}
푸 기능이 호출됩니다
double d = 123.98;
float f = 123.98f;
foo(d);
foo(f);
부동 소수점에 정확한 표현을 가지고있는 1과 0의 특수한 경우 (double, float)과 코드가 명확하게 일치하고 어떤 사소한 차이가있는 것이 아닌 코드가 분명하게 나오는 곳 -
Is 코드를 다시 작성하여 관련 Wfloat-equal 진단을 제기하지 않으며 이식성이 있으며 float 및 double 유형을 모두 지원할 수 있습니까?
당신은 단지 사람들을 위해 진단을 해제하는 GCC의'의 #pragma GCC 진단 푸시/팝/ignored'을 사용할 수를 포함한 시스템 헤더를 처리 할 때 지금까지 GCC에 관한 한 그것은 검사의 모두 비활성화됩니다 윤곽. –
memcmp라고 할 때 언제나'memcmp'를 사용할 수 있습니다. – VTT
@VTT 0과 1의 값을위한 별도의 변수가 있습니까? –