이론/컴퓨터구조

정수, 부동소수점 연산

ohojee 2024. 1. 6. 00:43

정수 덧셈

덧셈 ∙ 뺄셈 장치

  • 𝑋 − 𝑌 = 𝑋 + (−𝑌) = 𝑋 + (𝑌′ + 1)
  • 두개 더한 값 계산 ⇒ adder
  • but 한 자리수에 계산되는 값은 캐리까지 해서 3bit ⇒ 만들어지는 값은 그 자릿값과 캐라값 해서 2bit <= 이걸 full adder가 해줌
  • xor비트 추가해서 뺄셈까지 계산 가능
    • 덧셈에는 s가 0이라 y 값이 그대로 전달
    • s가 1이면 y를 반전시키는 셈 ⇒ y’이 adder에 들어감, 그럼 1을 어디서 더하냐? 캐리에 1 전달됨
  • (𝑌′ + 1) <= 2의보수 방식으로 변환

오버플로우

  • 두 수가 다른 부호일 경우, 오버플로우 발생 x
  • 두 수가 동일한 부호일 경우, 오버플로우 발생 가능
    • 마지막에 발생하는 두개의 캐리가 다른 값 ⇒ 오버플로우 발생
    • 같은 부호를 더했는데 다른 부호가 나온다 ⇒ 오버플로우 발생
      • 이걸 xor로 연결하면 됨

덧셈연산

  • 부호 값에 따라 그 값으로 확장
  • imm은 6비트

정수 곱셈

  • hw로 지원, but 안된다면 sw로 해결

종이-연필 방식

시프트-덧셈 방식

부분 곱 발생 시 덧셈 연산

  • 누적 부분곱의 초기 값은 0
  • 단계만 나눠놓고 종이 연필 방식이랑 똑같음

누적곱 시프트

  • hw 구현에 적합
  • 항상 4bit만 더하면 됨 ⇒ 연산장치 짧아질 수 o

하드웨어 곱셈장치

단점

  • 항상 승수의 비트수의 2배에 해당하는 덧셈 장치 필요
  • 유부호 정수의 경우 절대값으로 계산 후 부호 변환 필요

Booth 알고리즘

  • 1은 시프트 연산 6번, 덧셈 연산 6번이 필요
  • 2는 시프트 연산 2번, 덧셈/뺄셈 연산 2번 ⇒ 효율적
  • 피승수 𝐴(= 𝑎𝑛−1 ⋯ 𝑎2𝑎1𝑎0) × 승수 𝐵(= 𝑏𝑛−1 ⋯ 𝑏2𝑏1𝑏0)에서
    • 승수의LSB인𝑏0 오른쪽에값이0인비트𝑏−1을추가
    • 오른쪽 추가 비트 𝑏−1부터 1비트씩 왼쪽으로 이동 ⇒ 2개의 비트를 묶어 점검
  • 승수의 비트 구성이 연속된 1이나 0이 많을 때 덧셈/뺄셈 연산 회수가 줄어들어 효과적

  • 6×−5 = 0110 × 1011
  • −5 × 6 = 1011 × 0110

부동소수점 연산

덧셈

  • 가수의 길이를 3bit라 가정
  • 1.010×21+1.111×221.010 × 2^{−1} + 1.111 × 2^{−2}

곱셈

  • 가수의 길이를 3bit라 가정
  • 1.010×21×1.111×221.010 × 2^{−1} × 1.111 × 2^{−2}

가드 디지트(가드 비트)

  • 가수의 유효자리 오른쪽에 추가로 제공하는 자리
  • 정규화 과정에서 가수가 오른쪽으로 시프트 될 때 발생하는 손실 방지
  • ex) 가수 유효자리 3자리, 1.69×1027.85×1011.69×10^2 −7.85×10^1
    • 가드 디지트 x
    • 가드 디지트 o


Uploaded by N2T