Skip to main
ieee 754는 sign bit, exponent와 mantissa로 이루어진다.
- exponentiation는 거듭제곱을 의미하는데, 이때 $$a^b$$인 경우에, a는 밑(base), b는 지수 (exponent or power)로 부른다
- ieee754에서 exponent는 “floating point로 표현할 수를 정규화했을때, 2의 지수"이므로 거의 동일한 의미를 지닌다
- mantissa의 경우 이 단어에 대한 정확한 어원은 모르는듯 하다 (출처)
- 그러나 상용로그에서의 mantissa(가수)를 가져온 것으로 보이는데, 이는 상용로그의 가수와 ieee754의 가수가 비슷한 역할을 하고있기 때문으로 보인다
- 일반적으로 어떤 수 A를 $$A = a * 10^n$$로 표현할 수 있고, 이에 상용로그를 취해주면 $$log A = log a + n$$이 된다
- 이때 n을 지표, $$loga$$를 가수(假數)라 부른다 (출처)
- 마찬가지로 2진법에서 어떤 수 A는 $$A = a * 2^n$$으로 표기될 수 있고, 이를 ieee754에서는 $$(-1)^s * (Mantissa) * 2^{Exponent}$$로 정규화해서 표현한다.
- 단 precision 혹은 fraction, significand 정도로 부르는 경우도 있는것 같다.
- 32비트로 표현되는 부동소숫점을 single precision으로 부르고, 64비트의 경우 double precision으로 부른다.
- 32비트의 경우,
Sign bit = 1bit
Exponent = 8bit
, Mantissa = 23bit
로 표현된다
- 따라서 single precision의 경우, 정확한 계산법은 아래와 같다.
- $$Mantissa = 1+ \sum_{i=0}^{22} bit_{22-i} * 2^{-i}$$
- 가수는 언제나 1.xxxxx의 형태로 변환되고, 이 수가 저장될때 소숫점 이하의 값만 저장된다.
- 따라서 원래 수를 계산할 때, 가수에는 저장된 값에 1이 더해져야 한다.
- $$Exponent = \sum_{i=0}^7 bit_{23+i} * 2^i$$
- $$Sign = (-1)^{bit_{31}}$$
- $$Value = Sign * Mantissa * 2^{(Exponent - 127)}$$
- 저장할 때 지수가 음수가 되는것을 막기 위해서 127을 더해주어서 저장한다.
- 정확히는 지수의 크기에서 1을 뺀 수 $$2^{8-1}-1$$
- 128이 아닌 이유는 지수 FF와 00는 독특하게 해석되기 때문이다.
- 지수가 음수가 되면, 한번 계산해서 크기 비교를 해 주어야 한다. (컴퓨터에서 음수는 보수로 저장되기 때문에)
- 그러나 모두 양수로 저장된다면, 값만 비교해주면 되기 때문에 좀 더 빠르게 계산이 가능하고, 이로 인해서 127을 더해서 양수로 저장한다고 한다. (출처)
- 따라서 원래 수를 계산할 때, 저장된 값에 127을 빼 주어야 한다.
- double precision의 경우는 bit layout만 다르기 때문에 생략한다.
- single precision에서 값의 크기는 Exponent를 따르는데, 이는 -127 ~ 127까지 저장이 가능하다.
- 따라서 $$2^{-127} ~ 2^{127}$$까지의 수를 저장할 수 있다
- single precision에서 값의 정밀도는 Mantissa를 따르는데, 이는 23비트이다
- 따라서 $$1 + 2^{-23} ~ 2-2^{-23}$$까지의 정밀도를 가진다
- 이는 얼추 1.000000119 ~ 1.999999881의 정밀도를 가진다고 표현할 수 있다
IEEE 754,
Til