Programming language/C++

[c++] 실수형 자료형

chaenii 2022. 7. 2. 17:34

실수형 자료형

C++에서 실수란 소수부나 지수가 있는 수를 가리키며, 정수보다 훨씬 더 넓은 표현 범위를 가집니다.

하지만 컴퓨터에서 실수를 표현하는 방식은 오차가 발생할 수 밖에 없는 태생적 한계를 지닙니다.

이러한 실수형 데이터의 오차는 C++뿐만 아니라 모든 프로그래밍 언어에서 발생하는 공통된 문제입니다.

정수표현 방식과 실수 표현 방식은 다르다.

실수 표현 방식은 정밀도에 의존한다.

따라서 double(8) 자료형이 float(4)보다 더 아래의 소수점까지 정확하게 표현이 가능하다.

 

정수는 정수끼리, 실수는 실수끼리 연산하되, 두 표현방식의 피 연산자가 연산될 경우 명시적으로 변환해야 한다.

 

아래의 수식에서 4.0은 정수의 표현 방식으로 전환되어 표현된다.

int a = 4 + 4.0;

부동소수점

십진수 21.8125를 정규화된 이진수로 나타낸다고 해보자. 소수점 위의 21=(10101)2이고, 소수점 아래 0.8125=(1101)2이다.

 

<소수점 아래 계산법>

(0.1)2 => (0.1)2의 2배가 1이다. 즉 2의 -1승이다.

(0.01)2 => 2의 -2승이다.

=>  (1101)2 = 0.5 x 1 + 0.25 x 1 + 0.125 x 0 + 0.0625 x 1 = 0.8125

 

즉 (21.8125)10=(10101.1101)2이며, 이를 정규화하면 0.101011101×25이다. 지수의 5를 이진법으로 바꾸면 101이다. 따라서, 32비트 정규화된 부동소수점수로 나타낸다면 맨 앞 비트의 부호는 0(양)이고, 지수부 부호는 0(양)이며, 지수부 나머지 6개 비트는 000101, 가수부는 101011101000…이 된다. 이것을 결합하면 (0000001011010111010000000000000000)2가 된다.


부동소수점

반응형

'Programming language > C++' 카테고리의 다른 글

[C++] 정수형 자료형  (0) 2022.07.02