부동소수점 (floating point)
점(point)이 떠돌아다닌다(float)는 형태
#include <iostream>
#include <iomanip>
#include <limits>
int main()
{
using namespace std;
float f;
double d;
long double ld;
cout << numeric_limits<float>::max() << endl;
cout << numeric_limits<double>::max() << endl;
cout << numeric_limits<long double>::max() << endl;
return 0;
}
4, 8, 8 비트의 세가지 자료형이 있는데, #include <limits> 사용해서
numeric_limits<float>::lowest 최소 표현할 수 있는 범위가 나온다.
( min은 표현할 수 있는 최소 범위의 절댓값으로 표기됨. )
setprecision ( 소수점 표기 )
#include <iostream>
#include <iomanip>
#include <limits>
int main()
{
using namespace std;
cout << std::setprecision(16);
cout << 1.0 / 3.0 << endl;
return 0;
}
#include <iomanip> : 입출력을 manipulator가 조작한다.
cout << std::setprecision(16); 소수점을 몇자리까지 출력할지 가능하다. (16자리)
소수점 표기의 한계
#include <iostream>
#include <iomanip>
#include <limits>
int main()
{
using namespace std;
double d(0.1);
cout << d << endl;
cout << std::setprecision(17);
cout << d << endl;
return 0;
}
16자리를넘는 17자리로 출력하면 0.1에 가장 근접한 수를 표현함. (한계가 있다.)
숫자가 아닌 수 ( 0으로 나누어보기 )
#include <iostream>
#include <iomanip>
#include <limits>
int main()
{
using namespace std;
double zero = 0.0;
double posinf = 5.0 / zero;
double neginf = -5.0 / zero;
double nan = zero / zero;
cout << posinf << endl;
cout << neginf << endl;
cout << nan << endl;
return 0;
}
0으로 나눌 경우 positive infinite, negative infinite 0을 0으로 나눌 경우 not a number(indeterminate)가 나오는데
디버깅
#include <iostream>
#include <iomanip>
#include <limits>
#include <cmath>
int main()
{
using namespace std;
double zero = 0.0;
double posinf = 5.0 / zero;
double neginf = -5.0 / zero;
double nan = zero / zero;
cout << posinf << " " << std::isinf(posinf) << endl;
cout << neginf << " " << std::isinf(neginf) << endl;
cout << nan << " " << std::isnan(nan) << endl;
cout << 1.0 << " " << std::isnan(1.0) << endl;
return 0;
}
#include <cmath>헤더를 인클루드 해준후 std::isinf(), std::isnan()를 이용하여 참 혹은 거짓을 구별할 수 있게된다.
출력결과
'개발 > C++' 카테고리의 다른 글
[C++] 2.4 리터럴 상수, 심볼릭 상수 (0) | 2023.06.12 |
---|---|
[C++] 2.3 불리언 자료형과 if문, 문자형(Char) [캐스팅, 버퍼, limits] (0) | 2023.06.01 |
[C++] 2.1 자료형, 정수형, 고정너비 정수, 무치형(Void) [auto, 초기화, 오버플로우, void] (0) | 2023.05.31 |
[C++] 1.2 헤더파일과 헤더가드 [#pragma once] (0) | 2023.05.31 |
[C++] 1.1 변수, 연산자, 선언 (0) | 2023.05.30 |