-1^sign x (1.mantissa) x 2^(exponent-bias)
-> 즉, 부호 + 가수(Mantissa) = 지수(Exponent)로 표현한다.
1 bit : sign
8 bits : exponent, bias=127
23 bits : mantissa, 숨겨진 1 포함하면 24비트 정밀도
ex) 0100_0001_0011_0000_0000_0000_0000_0000 -> 총 32비트
따라서 최종값은 (-1)^0 1.375 2^3 = 11 이다.
그러므로 이 float의 max, min을 계산해보면
부호가 음수, 지수 8bits가 전부 1, mantissa도 전부 1이면 될 것이다.
즉, 1111_1111_1111_1111_1111_1111_1111_1111
하지만! IEEE 754에는 특수 규칙이 있다.
위처럼 exponenet bit가 전부 1이어서 255가 되고, mantissa가 0이 아니면 Not a number를 위한 예약값을 지칭하게 된다.
이처럼 IEEE 754에는 이런 예외 규칙들이 있다.
exponent = 0, mantissa = 0 -> +-0
exponent = 0, mamtissa != 0 -> Denormalized number
exponent = 255, mantissa = 0 -> 무한대
exponent = 255, mantissa != 0 -> NaN
그러므로 최대절댓값은 0111_1111_0111_1111_1111_1111_1111_1111 이다.
최소절댓값은 0000_0000_0000_0000_0000_0000_000_0001 이다.
그래서 float의 최소절댓값은 4.94.. 10^-324, 최대절댓값은 1.7977.. 10^308 이다.
double은 float과 완전 동일한 구조를 가지며, sign, exponent, mantissa/fraction 파트의 비트 분배와 지수 파트의 bias값만 달라질 뿐이다.
- sign 1 bit / exponent 11 bits, bias = 1023 / mantissa 52 bits