C++
[C++] 실수형 자료형
jeylee
2021. 7. 27. 12:51
// 정수표현 방식과 실수 표현 방식은 다르다
// 실수 표현 방식은 정밀도에 의존한다
// 따라서 double(8) 자료형이 float(4)보다 더 아래의 소수점까지 정학하게 표현이 가능하다.
// 정수는 정수끼리, 실수는 실수끼리 연산하되, 두 표현방식의 피 연산자가 연산될 경우 명시적으로 변환하자.
float f = 10.2415f + (float)20;
정수와 실수는 처리방법이 다릅니다.
이를 알기 위해서는 부동소수점이란 내용을 참고합니다.
<위키자료>
실제 컴퓨터에서는 보통 이진법을 사용하여 다음과 같이 세 부분의 값으로 실수를 나타낸다.
- 부호부 (1비트) : 양수일 때는 0, 음수일 때는 1
- 지수부 (부호가 있는 정수, 8비트) : 제일 앞의 1비트는 부호를 정하고, 나머지 7비트로 표시
- 정규화된 가수부 (부호가 없는 정수, 23비트) : 제일 앞의 비트는 정규화되었으므로 1이다.
예를 들어, 십진수 21.8125를 정규화된 이진수로 나타낸다고 해보자.
소수점 위의 (21.)10=(10101)2이고, 소수점 아래 (0.8125)10=(11010)2이다.
즉 (21.8125)10=(10101.11010)2이며, 이를 정규화하면 0.1010111010×25이다.
지수의 5를 이진법으로 바꾸면 101이다.
따라서, 32비트 정규화된 부동소수점수로 나타낸다면 맨 앞 비트의 부호는 0(양)이고, 지수부 부호는 0(양)이며, 지수부 나머지 6개 비트는 000101, 가수부는 101011101000…이 된다. 이것을 결합하면 (000001011010111010000000000000000)2가 된다.
실수는 근사값으로 처리하기 때문에 연산후 원하는 값이 정수 1이나와야 하지만 0.99998이 반환되어 원하는 작동을 못하는 경우가 생기기도 합니다.