float, double, long double을 통해 변수를 선언한다.
실수를 표현할 때 소수점의 위치를 고정시키지 않고
지수부와 가수부를 나타내어 표현한 것이다.
10진수 실수를 부동 소수점으로 표현하는 법
- 10진수를 2진수로 변환
- 가장 첫번째에 있는 1의 뒤로 소수점을 보내준다.
- 소수점을 기점으로 부호, 가수부, 지수부를 나눈다.
#include <iostream>
using namespace std;
int main(){
unsigned int num0;
float num1 = -118.625;
memcpy(&num0, &num1, sizeof(num1));
// memcpy 함수를 이용해 num1의 메모리 값을 num0의 주소로 복사함
cout << num0 << endl;
cout << num1 << endl;
return 0;
}
위 코드를 이용하여 부동 소수점의 가수부를 구할 수 있다.
3270328320
-118.625
실수형은 2진수로 나타내기 때문에 정확한 수를 나타낼 수 없다.
#include <iostream>
using namespace std;
int main(){
float num0 = 0.1f;
float num1 = 0.02f * 5.0f;
// 숫자 뒤에 f를 붙여 float으로 형변환을 시켜준다.
cout.precision(64);
// cout을 더 정확하게 나타내기 위한 함수로 64자리까지 나타낸다.
cout << "num0 = " << num0 << endl;
cout << "num1 = " << num1 << endl;
return 0;
}
위 코드를 이용하여 실수형의 정확한 값을 출력할 수 있다.
num0 = 0.100000001490116119384765625
num1 = 0.0999999940395355224609375
#include <iostream>
#include <cfloat>
using namespace std;
int main(){
float num0 = 1.0f;
float num1 = 0.0f;
for(int i= 0; i < 10; i++)
num1 += 0.1;
if(num0 == num1)
cout << "equal 0" << endl;
if(fabsf(num0 - num1) <= FLT_EPSILON)
cout << "equal 1" << endl;
// fabsf()를 이용해 절대값으로 치환
return 0;
}
위 코드를 이용해 오차를 확인 할 수 있다.
"equal 1"
- FLT_EPSILON
부동 소수점이 양수로 표현 할 수 있는 수 중에 가장 작은 수- FLT_MAX
부동 소수점으로 표현 할 수 있는 수 중에 가장 큰 수- FLT_MIN
부동 소수점으로 표현 할 수 있는 수 중에 작은 큰 수