알고리즘과 언어/c++
c++ 마이너스 0 ?
nextcoder
2023. 1. 7. 19:03
c++ 에는 마이너스 0(negative zero)이 존재한다.
이는 positive zero와 일치한다.
if (0 == -0) // True
나를 당황시켰던 코드는 다음과 같다.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float x = -2;
float y = 10;
cout << round(x / y) << endl;
}
output :
negative zero는 positive zero와 일치하기 때문에 평상시에는 따로 신경쓰지 않아도 되지만, 출력하는 상황이라면 주의해야한다.
특히 출력 문구로 Pass/Fail을 결정하는 알고리즘 테스트의 경우에는..!!
float 값을 통한 연산을 할 때, -0가 나올 수 있음을 염두해야 한다.
절대값을 return하는 abs를 이용하거나 0.0을 더해주는 방식으로 피할 수 있다.
cout << abs(round(x / y)) << endl;
cout << round(x / y) + 0.0 << endl;
// output : 0
그런데 또 abs 함수의 헤더도 희한하다.
int 타입의 정수 절대값 함수(abs)의 오버로딩은 <cstdlib>에 존재하고,
float, double 타입의 실수 절대값 함수(abs)의 오버로딩은 <cmath>에 존재합니다.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int x = -5;
int y = -5.0;
cout << abs(x) << endl;
cout << abs(y) << endl;
}
//output : 5
// 5
그런데 cmath로 정수도 절대값 반환이 되는 것을 확인했다.