float, double에 관한 소스코드 몇 가지를 정리한다.
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
cout << numeric_limits<float>::max() << endl;
cout << numeric_limits<double>::min() << endl;
cout << numeric_limits<long double>::lowest() << endl;
return 0;
}
각 자료형의 최대 표현 가능한 범위, 최소 표현 가능한 범위(절대 값), 음수의 최소 표현 가능한 범위를 확인 할 수 있다.
Output
int main()
{
double zero = 0.0;
double pos = 5.0 / zero;
double neg = -5.0 / zero;
double nan = zero / zero;
cout << pos << " " << std::isinf(pos) << endl;
cout << neg << " " << std::isinf(neg) << endl;
cout << nan << " " << std::isnan(nan) << endl;
cout << 1.0 << " " << std::isnan(1.0) << endl;
return 0;
}
계산한 값이 무한 값인지, Not a Number 인지 판별하여 true(1), flase(0)로 반환한다.
Output
int main()
{
double d1 = 1.0;
double d2 = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1;
cout << std::setprecision(20);
cout << d1 << endl;
cout << d2 << endl;
return 0;
}
앞서 얘기했던 부동소수점 계산 오차를 보여준다.
여기서 setprecesion은 설정한 자릿수까지 출력하라는 의미다.
Output
'Programming > C, C++' 카테고리의 다른 글
Floating Point (0) | 2018.09.10 |
---|---|
배열 (0) | 2017.12.11 |
데이터형에 관계없는 swap() 함수 (0) | 2017.12.11 |
void포인터, 함수 포인터 (0) | 2017.12.11 |
포인터의 포인터 (0) | 2017.12.11 |