CSC 320 Chapter #3, Spring 2015
Lebanese American University · Computer Organisation · 10 pages · Dr. Anonymous
More CSC 320 files
- Chapter #1 · Spring 2015ChapterView
- Chapter #2 · Spring 2015ChapterView
- Chapter #4 · Spring 2015ChapterView
- Chapter #5 · Spring 2015ChapterView
- Chapter #7 · Spring 2015ChapterView
- Chapter Conversion · Spring 2015ChapterView
- Exam For Chapter 1 · Spring 2015ChapterView
- Exam For Chapter 2 · Spring 2015ChapterView
Show the text of this chapter
Chapter 3
Arithmetic for Computers
Chapter 3 — Arithmetic for Computers — 2
Arithmetic for Computers
! Operations on integers
! Addition and subtraction
! Multiplication and division
! Dealing with overflow
! Floating-point real numbers
! Representation and operations
§3.1 Introduction
Chapter 3 — Arithmetic for Computers — 3
Integer Addition
! Example: 7 + 6
§3.2 Addition and Subtraction
! Overflow if result out of range
! Adding +ve and –ve operands, no overflow
! Adding two +ve operands
! Overflow if result sign is 1
! Adding two –ve operands
! Overflow if result sign is 0
Chapter 3 — Arithmetic for Computers — 4
Integer Subtraction
! Add negation of second operand
! Example: 7 – 6 = 7 + (–6)
+7:
0000 0000 … 0000 0111
–6:
1111 1111 … 1111 1010
+1:
0000 0000 … 0000 0001
! Overflow if result out of range
! Subtracting two +ve or two –ve operands, no overflow
! Subtracting +ve from –ve operand
! Overflow if result sign is 0
! Subtracting –ve from +ve operand
! Overflow if result sign is 1
Chapter 3 — Arithmetic for Computers — 5
Dealing with Overflow
! Some languages (e.g., C) ignore overflow
! Use MIPS addu, addui, subu instructions
! Other languages (e.g., Ada, Fortran)
require raising an exception
! Use MIPS add, addi, sub instructions
! On overflow, invoke exception handler
! Save PC in exception program counter (EPC)
register
! Jump to predefined handler address
! mfc0 (move from system control) instruction is
used to retrieve EPC value, to return after
corrective action
Chapter 3 — Arithmetic for Computers — 7
Multiplication
! Start with long-multiplication approach
1000
× 1001
1000
0000
0000
1000
1001000
Length of product is
the sum of operand
lengths
multiplicand
multiplier
product
§3.3 Multiplication
Chapter 3 — Arithmetic for Computers — 8
Multiplication Hardware
Initially 0
Chapter 3 — Arithmetic for Computers — 11
MIPS Multiplication
! Two 32-bit registers for product
! HI: most-significant 32 bits
! LO: least-significant 32-bits
! Instructions
! mult rs, rt / multu rs, rt
! 64-bit product in HI/LO
! mfhi rd / mflo rd
! Move from HI/LO to rd
! Can test HI value to see if product overflows 32 bits
! mul rd, rs, rt
! Least-significant 32 bits of product –> rd
Chapter 3 — Arithmetic for Computers — 16
MIPS Division
! Use HI/LO registers for result
! HI: 32-bit remainder
! LO: 32-bit quotient
! Instructions
! div rs, rt / divu rs, rt
! No overflow or divide-by-0 checking
! Software must perform checks if required
! Use mfhi, mflo to access result
Chapter 3 — Arithmetic for Computers — 17
Floating Point
! Representation for non-integral numbers
! Including very small and very large numbers
! Like scientific notation
! –2.34 × 1056
! +0.002 × 10–4
! +987.02 × 109
! In binary
! ±1.xxxxxxx2 × 2yyyy
! Types float and double in C
normalized
not normalized
§3.5 Floating Point
Chapter 3 — Arithmetic for Computers — 18
Floating Point Standard
! Defined by IEEE Std 754-1985
! Developed in response to divergence of
representations
! Portability issues for scientific code
! Now almost universally adopted
! Two representations
! Single precision (32-bit)
! Double precision (64-bit)
Chapter 3 — Arithmetic for Computers — 19
IEEE Floating-Point Format
! S: sign bit (0 ⇒ non-negative, 1 ⇒ negative)
! Normalize significand: 1.0 ≤ |significand| < 2.0
! Always has a leading pre-binary-point 1 bit, so no need to
represent it explicitly (hidden bit)
! Significand is Fraction with the “1.” restored
! Exponent: excess representation: actual exponent + Bias
! Ensures exponent is unsigned
! Single: Bias = 127; Double: Bias = 1023
S Exponent
Fraction
single: 8 bits
double: 11 bits
single: 23 bits
double: 52 bits
(Exponent Bias)
S
(1 Fraction) 2
( 1)
x
−
×
+
×
= −
Chapter 3 — Arithmetic for Computers — 20
Single-Precision Range
! Exponents 00000000 and 11111111 reserved
! Smallest value
! Exponent: 00000001
⇒ actual exponent = 1 – 127 = –126
! Fraction: 000…00 ⇒ significand = 1.0
! ±1.0 × 2–126 ≈ ±1.2 × 10–38
! Largest value
! exponent: 11111110
⇒ actual exponent = 254 – 127 = +127
! Fraction: 111…11 ⇒ significand ≈ 2.0
! ±2.0 × 2+127 ≈ ±3.4 × 10+38
Chapter 3 — Arithmetic for Computers — 21
Double-Precision Range
! Exponents 0000…00 and 1111…11 reserved
! Smallest value
! Exponent: 00000000001
⇒ actual exponent = 1 – 1023 = –1022
! Fraction: 000…00 ⇒ significand = 1.0
! ±1.0 × 2–1022 ≈ ±2.2 × 10–308
! Largest value
! Exponent: 11111111110
⇒ actual exponent = 2046 – 1023 = +1023
! Fraction: 111…11 ⇒ significand ≈ 2.0
! ±2.0 × 2+1023 ≈ ±1.8 × 10+308
Chapter 3 — Arithmetic for Computers — 22
Floating-Point Precision
! Relative precision
! all fraction bits are significant
! Single: approx 2–23
! Equivalent to 23 × log102 ≈ 23 × 0.3 ≈ 6 decimal
digits of precision
! Double: approx 2–52
! Equivalent to 52 × log102 ≈ 52 × 0.3 ≈ 16 decimal
digits of precision
Chapter 3 — Arithmetic for Computers — 23
Floating-Point Example
! Represent –0.75
! –0.75 = (–1)1 × 1.12 × 2–1
! S = 1
! Fraction = 1000…002
! Exponent = –1 + Bias
! Single: –1 + 127 = 126 = 011111102
! Double: –1 + 1023 = 1022 = 011111111102
! Single: 1011111101000…00
! Double: 1011111111101000…00
Chapter 3 — Arithmetic for Computers — 24
Floating-Point Example
! What number is represented by the single-
precision float
11000000101000…00
! S = 1
! Fraction = 01000…002
! Fxponent = 100000012 = 129
! x = (–1)1 × (1 + 012) × 2(129 – 127)
= (–1) × 1.25 × 22
= –5.0
Chapter 3 — Arithmetic for Computers — 27
Floating-Point Addition
! Consider a 4-digit decimal example
! 9.999 × 101 + 1.610 × 10–1
! 1. Align decimal points
! Shift number with smaller exponent
! 9.999 × 101 + 0.016 × 101
! 2. Add significands
! 9.999 × 101 + 0.016 × 101 = 10.015 × 101
! 3. Normalize result & check for over/underflow
! 1.0015 × 102
! 4. Round and renormalize if necessary
! 1.002 × 102
Chapter 3 — Arithmetic for Computers — 28
Floating-Point Addition
! Now consider a 4-digit binary example
! 1.0002 × 2–1 + –1.1102 × 2–2 (0.5 + –0.4375)
! 1. Align binary points
! Shift number with smaller exponent
! 1.0002 × 2–1 + –0.1112 × 2–1
! 2. Add significands
! 1.0002 × 2–1 + –0.1112 × 2–1 = 0.0012 × 2–1
! 3. Normalize result & check for over/underflow
! 1.0002 × 2–4, with no over/underflow
! 4. Round and renormalize if necessary
! 1.0002 × 2–4 (no change) = 0.0625