TIL

[TIL] 부동소수점 Floating Point C언어

아람2 2024. 10. 5. 17:24
반응형

부동소수점 Floating Point 

소수점의 위치가 고정되어 있지 않고 데이터의 크기나 정밀도에 따라 소수점이 자유롭게 이동할 수 있는 숫자 표현 방식 

 

  • sign: 숫자의 부호(양수 또는 음수) 
  • mantissa: 수의 유효 숫자 
  • base: 일반적으로 2(이진수) 또는 10(십진수) 
  • exponent: 소수점의 위치를 결정하는 지수 

+ 지수에 들어가는 값의 범위 float 1~254/ double 1~2046 

부동소수점 특징 

* 모든 숫자를 1.xxx 형식으로 나타낸다 

* 첫번째 비트는 양수, 음수를 구분하는데 사용한다 

 

소수의 10진법 - 2진법 진법 변환

https://modoocode.com/17

IEEE 754 방식으로 소수 저장하기 

1) 부호 비트 (1 bit) 

0 이상이면 (양수이면) 0 이, 아니라면 (음수라면) 1 할당 

2) 변환된 이진수 정규화 (Normalization) 

정규화 - 어떠한 이진수를 1.xxxx 꼴로 만드는 것 
ex) 1110110.101 -> 1.110110101 , 쉬프트 연산이 6번 오른쪽으로 일어나서 지수는

 

3) 무한 소수인 경우 반올림 

4) 계산한 지수에 바이어스 Bias 처리 

Bias 처리 - 지수에 2^(e-1) - 1 만큼 더해준다 (e 지수 부분의 비트 수) 
ex. Float 는 지수 부분이 8 bit 이므로 127, double 형이면 11 bit 이므로 1023 

 

그래서 -118.625 의 지수는 6+127 = 133 = 10000101(2) 

 

NaN 과 Inf

IEEE 754 표준에 따른 부동소수점 자료형은 특별한 두 가지 값을 표현할 수 있다 

1) NaN - Not a Number

연산의 결과가 유효한 숫자가 아닐 때 발생하는 값, 0을 0으로 나누는 연산이나, 

음수의 제곱근을 계산하는 경우처럼 수학적으로 정의되지 않은 연산이 이루어지면 NaN 발생 

NaN 은 자기 자신과도 같지 않다는 특징이 있으며, 그래서 NaN == NaN 은 거짓이다 

NaN 은 수학적 오류를 표현하기 위해 사용되며, 발생 원인을 추적하기 위해

여러 종류의 NaN 이 존재할 수 있다 (ex. 신호가 있는 NaN, 신호가 없는 NaN)

2) Inf - Infinity 

Infinity 는 수학적 무한을 나타내며, 양의 무한대 (+Inf) 와 음의 무한대 (-Inf) 로 구분한다 

매우 큰 수나, 0으로 나누기 (ex. 1 / 0) 와 같은 연산에서 발생할 수 있다 

* Inf + Inf 는 여전히 Inf 이다 

* Inf - Inf 는 정의되지 않으며 결과는 NaN 이 될 수 있다 

* 양의 Infinity 와 음의 Infinity 는 비교될 수 있으며, +Inf > 모든 실수 > -Inf 가 성립한다 

 

반응형