• Fractional Binary Numbers(고정 소수점)

    • 101.11(2) →5.75(10)
    • limit: 2로 나눈 수만 정확히 표현 가능, 그렇지 않으면 전부 순환소수
    • limit: w bit에 소수점이 하나이므로 범위가 제한된다.
  • IEEE Floating Point(부동 소수점)

    Untitled

    • M은 유효숫자, E는 지수이다

      • 만약 10110.111이 있다면, 맨 앞의 1까지 소수점을 보낸다
      • 그러면 1.0110111 * 2^4가 되므로, M=1.0110111, E = 4인 것이다.
    • float (single precision): 32 bit

      • one sign bit
      • 8 exponent bit
      • 23 fraction bit
    • double (double precision): 64 bit

      • one sign bit
      • 11 exponent bit
      • 52 fraction bit
    • Exponent 결정법; E = Exp - Bias Normalized Value: exp≠000…00, exp≠111…11일때만 적용

      • 위처럼 E를 결정한다
      • Bias를 더한다(bias = 2^(k-1)-1, k는 exponent 의 비트수)
        • float: bias = 127 →E는 -126~127, Exp 는 1~254
        • double: bias = 1023 →E는 -1022~1023, Exp는 1~2046
      • Exp를 exponent bit 칸에 넣는다

      Untitled

      • Denormalized Values

        • exp = 000…0 E = 1 - Bias를 사용! (0-Bias가 아님)

          → 이유: 아래 8bit 예제에서 볼 수 있듯, Largest Denormalized 값과 Smallest Normalized 값 사이 smooth 한 transition 이 일어날 수 있도록 하기 위한 정의임.

        Untitled

      • Special Values

        • exp = 111…1
    • OverView

      Untitled

      Untitled

      Untitled

      Untitled

    • Distribution

      Untitled

      Untitled

      → -1.0 과 1.0 사이 값들의 경우, denormalized : 바로 가장 작은 Normalized의 exp과 같은 간격으로 숫자가 표현됨. → 이유: 0을 표현 가능하기 위해서 (만약에 Normalized식으로 exp가 작아질수록 거리가 작게 되면 영원히 0에 닿을 수 없음. 그래서 denormalized는 normalized의 최소값과 같은 간격으로 숫자를 표현한다. ) (Gradual underflow: 점진적으로 작아져, 결국 0에 닿게 만들겠다~)

    • Create Floating point number

      1. Normalize

        • 1이 나올 때까지 shift left

        Untitled

      2. Rounding GRS condition

        1. Guard bit: LSB of result

        2. Round bit: first bit of removed bits

        3. sticky bit: OR of remaining bits(S중에 1이 하나라도 있으면1)

          Untitled

        GRS에 따른 처리

        • R이 1, S가 1이라면(011,111) round up 0.5보다 무조건 크므로 당연함
        • G가 1, R=1, S=0이라면(110) 가까운 짝수로 반올림(round to even) 0.5와 정확히 일치인 경우에 해당
        • R=0이면 down(000,001,100,101) 0.5보다 무조건 작으므로 당연함
        • 010: down

        Untitled

      3. Postnormalizing

        • rounding으로 생길 수 있는 overflow를 막기 위함
        1. shift right once
        2. incrementing exponent

        Untitled

    • Floating point operations

      • 덧셈 x+y = round(x+y)

        • 닫혀있지 않음(inf, NaN)
        • 교환
        • 결합: overflow, rounding때문에 불가능
        • 항등원(0)
        • 역원: inf, NaN은 없음
      • 곱셈

        Untitled

        • 에러 처리
          • M≥2면 M을 shift right, E++
          • M<1이면 M을 shift left k칸, E-=k
          • E out of range: overflow
        • 닫혀있지 않음(inf, NaN)
        • 교환
        • 결합: overflow, rounding때문에 불가능
        • 항등원(1)
        • 분배법칙: overflow, rounding 때문에 불가능
    • Floating Point in C

      • float: single precision
      • double: double precision
      • conversions
        • double, float → int
          • truncate(버림)
          • inf, NaN: TMin으로 설정
        • int → double
          • exact conversion
        • int → float
          • round, according to round mode