본문 바로가기
컴퓨터/컴퓨터구조

[UCB CS61C] Lec06 Floating Point

by 봄여름가을 2024. 1. 4.
  • floating point representation: 1.xxx * 2^yyyy의 형식으로 표현
  • IEEE754: 1 sign bit, 8 exponent bits, 23 significand bits
    • sign bit가 1이면 음수, 0이면 양수
    • 앞에 "1."이 생략되어있다고 보기 때문에, significand는 언제나 0에서 1 사이의 수가 된다.
    • 모든 숫자가 0인 경우를 0으로 약속한다.
    • exponent에는 biased notation(127)을 사용한다. unsigned value를 생각한 뒤에 127을 빼주면 된다.
  • 따라서 $(-1)^{S} (1+\text{Significand}) 2^{\text{exponent}-127}$

Special Numbers

  • 무한대는 exponent가 모두 1이고 significand가 모두 0인 수로 표현한다.
  • 그러면 exponent가 모두 1이고 significand가 nonzero인 경우, exponent가 모두 0이고 significand가 nonzero인 경우가 남는다.
    • 이를 활용하고자, exponent가 모두 1이고 significand가 nonzero인 경우를 NaN(Not a Number)로 취급했다. NaN이 아주 많을 수 있기 때문에(significand의 값에 따라서) 이에 따라 어떤 식의 에러가 나왔는지를 나타낼 수 있음.
    • exponent가 0이고 significand가 nonzero인 경우를 denorm으로 사용한다. 본래 "1."이 생략되어있었다고 봤지만 이렇게 되면 그게 없다고 보고, exponent는 -126이 된다고 보자. 그러면 제일 작은 수는 $2^{-149}$, 그 다음은 $2^{-148}$, $2^{-149}*3$, 이와 같은 식이다. 지수가 바뀌면 이 stride가 두 배가 된다.
      • 이렇게 하는 이유는? 만약 "1."을 그대로 사용한다면 0 주변에는 일종의 gap이 생긴다. 제일 작은 수가 $2^{-126}$인 반면, 그 다음 수는 $2^{-126} + 2^{-149}$이다.
  • Floating point는 덧셈에 대해 associative하지 않다!
  • precision이란 값을 나타내기 위해 사용되는 bit의 개수
  • accuracy는 실제 값과 컴퓨터로 나타낸 값 사이의 차이
  • 따라서 high precision은 high accuracy를 가능하게 하지만, 반드시 guarantee하지는 않는다. 이를테면 float 자료형으로 pi값을 3.14라고 썼다고 하면, accuracy가 높지는 않다.

댓글