-
c++ 마이너스 0 ?알고리즘과 언어/c++ 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로 정수도 절대값 반환이 되는 것을 확인했다.
'알고리즘과 언어 > c++' 카테고리의 다른 글
C++ 프로세스 메모리 측정 방법 (링크) (0) 2022.10.07 C++ ) 백준 2003 수들의 합 2 (0) 2022.03.09 C++ ) 백준 17090 미로 탈출하기 (0) 2022.02.17 C++ ) 백준 3055 탈출 (0) 2022.02.16 C++) 백준 1780 종이의 개수 (0) 2022.02.08