Bài giảng Kiến trúc máy tính và hợp ngữ - Chương 3: Biểu diễn số thực

Biểu diễn số 123.37510 sang hệ nhị phân?

 Ý tưởng đơn giản: Biểu diễn phần nguyên và phần thập phân riêng lẻ

 Với phần nguyên: Dùng 8 bit ([010, 25510])

12310 = 64 + 32 + 16 + 8 + 2 + 1 = 0111 10112

 Với phần thập phân: Tương tự dùng 8 bit

0.375 = 0.25 + 0.125 = 2-2 + 2-3 = 0110 00002

 123.37510 = 0111 1011.0110 00002

pdf 19 trang kimcuc 8840
Bạn đang xem tài liệu "Bài giảng Kiến trúc máy tính và hợp ngữ - Chương 3: Biểu diễn số thực", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kiến trúc máy tính và hợp ngữ - Chương 3: Biểu diễn số thực

Bài giảng Kiến trúc máy tính và hợp ngữ - Chương 3: Biểu diễn số thực
KIẾN TRÚC MÁY TÍNH & 
HỢP NGỮ
03 – Biểu diễn số thực
1
Đặt vấn đề
2
 Biểu diễn số 123.37510 sang hệ nhị phân?
 Ý tưởng đơn giản: Biểu diễn phần nguyên và phần thập phân riêng lẻ
 Với phần nguyên: Dùng 8 bit ([010, 25510])
12310 = 64 + 32 + 16 + 8 + 2 + 1 = 0111 10112
 Với phần thập phân: Tương tự dùng 8 bit
0.375 = 0.25 + 0.125 = 2-2 + 2-3 = 0110 00002
 123.37510 = 0111 1011.0110 00002
 Tổng quát công thức khai triển của số thập phân hệ nhị phân:
m
m
n
n
n
nmnn xxxxxxxxxxxx
 2...2.2.2....2.2........
2
2
1
1
0
0
2
2
1
121021
Đặt vấn đề
3
 Tuy nhiênvới 8 bit:
 Phần nguyên lớn nhất có thể biểu diễn: 255
 Phần thập phân nhỏ nhất có thể biểu diễn: 2-8 ~ 10-3 = 0.001
 Biểu diễn số nhỏ như 0.0001 (10-4) hay 0.000001 (10-5)?
 Một giải pháp: Tăng số bit phần thập phân
 Với 16 bit cho phần thập phân: min = 2-16 ~ 10-5
 Có vẻ không hiệu quảCách tốt hơn ?
 Floating Point Number (Số thực dấu chấm động)
Floating Point Number ?
4
 Giả sử ta có số (ở dạng nhị phân)
X = 0.00000000000000112 = (2
-15 + 2-16)10
 X = 0.112 * (2
-14)10 (= (2
-1 + 2-2).2-14 = 2-15 + 2-16)
 Thay vì dùng 16 bit để lưu trữ phần thập phân, ta có thể chỉ cần 6 bit:
X = 0.11 1110
 Cách làm: Di chuyển vị trí dấu chấm sang phải 14 vị trí, dùng 4 bit để lưu
trữ số 14 này
 Đây là ý tưởng cơ bản của số thực dấu chấm động (floating point number)
14 số 0
Chuẩn hóa số thập phân
5
 Trước khi các số được biểu diễn dưới dạng số chấm
động, chúng cần được chuẩn hóa về dạng: ±1.F * 2E
 F: Phần thập phân không dấu (định trị - Significant)
 E: Phần số mũ (Exponent)
 Ví dụ: 
 +0.0937510 = 0.000112 = +1.1 * 2
-4 
 -5.2510 = 101.012 = -1.0101 * 2
2
Biểu diễn số chấm động
6
 Có nhiều chuẩn nhưng hiện nay chuẩn IEEE 754 được
dùng nhiều nhất để lưu trữ số thập phân theo dấu chấm
động trong máy tính, gồm 2 dạng:
(slide sau)
Biểu diễn số chấm động
7
 Số chấm động chính xác đơn (32 bits): 
 Số chấm động chính xác kép (64 bits):
 Sign: Bit dấu (1: Số âm, 0: Số dương)
 Exponent: Số mũ (Biểu diễn dưới dạng số quá K (Biased) với
 Chính xác đơn: K = 127 (2n-1 - 1 = 28-1 - 1) với n là số bit lưu trữ Exponent
 Chính xác kép: K = 1023 (2n-1 - 1 = 211-1 - 1) 
 Significand (Fraction): Phần định trị (phần lẻ sau dấu chấm)
Sign Exponent (biased) Significand
1 bit 8 bits 23 bits
Sign Exponent (biased) Significand
1 bit 11 bits 52 bits
Ví dụ
8
 Biểu diễn số thực sau theo dạng số chấm động chính xác đơn (32 bit): X = -5.25
 Bước 1: Đổi X sang hệ nhị phân
X = -5.2510 = -101.012
 Bước 2: Chuẩn hóa theo dạng ±1.F * 2E
X = -5.25 = -101.01 = -1.0101 * 22
 Bước 3: Biểu diễn Floating Point
 Số âm: bit dấu Sign = 1
 Số mũ E = 2 Phần mũ exponent với số thừa K=127 được biểu diễn:
 Exponent = E + 127 = 2 + 127 = 12910 = 1000 00012
 Phần định trị = 0101 0000 0000 0000 0000 000 (Thêm 19 số 0 cho đủ 23 bit)
 Kết quả nhận được: 1 1000 0001 0101 0000 0000 0000 0000 000
Thảo luận về exponent
9
 Vì sao phần số mũ exponent không giữ nguyên lại phải lưu trữ
dưới dạng số quá K (Dạng biased)?
 Giả sử trong số chấm động chính xác đơn (32 bits), ta dùng 8 
bits để lưu giá trị exponent (biểu diễn dưới dạng số quá K), 
vậy miền giá trị của nó là [0, 255] 
 Với K = 127, số mũ gốc ban đầu có miền giá trị [-127, 128]
 Miền giá trị này khá vô lý, vậy tại sao chúng ta không chọn
số K = 128 để miền giá trị gốc là [-128, 127] như bình
thường?
Câu hỏi 1 - Đáp án
10
 Sở dĩ Exponent được lưu trữ dưới dạng Biased vì
ta muốn chuyển từ miền giá trị số có dấu sang 
số không dấu (vì trong biased, số k được chọn
để sau khi cộng số bất kỳ trong miền giá trị gốc, 
kết quả là số luôn dương)
 Dễ dàng so sánh, tính toán
Câu hỏi 2 - Đáp án
11
 Số K được chọn là 127 mà không phải là 128 vì tại bước 2 
trước khi biểu diễn thành số chấm động, chúng ta cần
phải chuẩn hóa thành dạng ±1.F * 2E
 Tức là chúng ta sẽ luôn luôn để dành 1 bit (số 1) phía
trước dấu chấm chứ không đẩy sang trái hết
 Với 8 bit, số mũ gốc ban đầu không thể đạt mức nhỏ
nhất là -128 mà chỉ là -127
 Do vậy ta chỉ cần chọn K = 127 là được
Vậy thì
12
 Khi muốn biểu diễn số 0 thì ta không thể tìm ra bit trái
nhất có giá trị = 1 để đẩy dấu chấm động, vậy làm sao
chuẩn hóa về dạng ±1.F * 2E ?
 Với số dạng ±0.F * 2-127 thì chuẩn hóa được nữa không?
 Với K = 127, exponent lớn nhất sẽ là 255 
 Số mũ gốc ban đầu lớn nhất là 255 – 127 = +128 
 Vô lý vì với 8 bit có dấu ta không thể biểu diễn được số
+128 ?
Trả lời
13
 Vì đó là những số thực đặc biệt, ta không thể
biểu diễn bằng dấu chấm động 
Số thực đặc biệt
14
 Số 0 (zero)
 Exponent = 0, Significand = 0
 Số không thể chuẩn hóa (denormalized)
 Exponent = 0, Significand != 0
 Số vô cùng (infinity)
 Exponent = 1111 (toàn bit 1), Significand = 0
 Số báo lỗi (NaN – Not a Number)
 Exponent = 1111 (toàn bit 1), Significand != 0
Phân bố các số thực (32 bits)
15
Chuẩn IEEE 754
16
Bài tập 1
17
 Biểu diễn số thực sau theo dạng số chấm động chính xác đơn (32 bit): X = +12.625
 Bước 1: Đổi X sang hệ nhị phân
X = -12.62510 = -1100.1012
 Bước 2: Chuẩn hóa theo dạng ±1.F * 2E
X = -12.62510 = -1100.1012 = -1.100101 * 23
 Bước 3: Biểu diễn Floating Point
 Số dương: bit dấu Sign = 0
 Số mũ E = 3 Phần mũ exponent với số thừa K=127 được biểu diễn:
 Exponent = E + 127 = 3 + 127 = 13010 = 1000 00102
 Phần định trị = 1001 0100 0000 0000 0000 000 (Thêm 13 số 0 cho đủ 23 bit)
 Kết quả nhận được: 0 1000 0010 1001 0100 0000 0000 0000 000
Bài tập 2
18
 Biểu diễn số thực sau theo dạng số chấm động chính xác đơn (32 bit): X = -3050
 Bước 1: Đổi X sang hệ nhị phân
X = -305010 = -1011 1110 10102
 Bước 2: Chuẩn hóa theo dạng ±1.F * 2E
X = -305010 = - 1011 1110 10102 = -1.01111101010 * 211
 Bước 3: Biểu diễn Floating Point
 Số âm: bit dấu Sign = 1
 Số mũ E = 11 Phần mũ exponent với số thừa K=127 được biểu diễn:
 Exponent = E + 127 = 11 + 127 = 13810 = 1000 10102
 Phần định trị = 0111 1101 0100 0000 0000 000 (Thêm 13 số 0 cho đủ 23 bit)
 Kết quả nhận được: 1 1000 1010 0111 1101 0100 0000 0000 000 
Homework
19
 Sách W.Stalling – Computer Arithmetic, đọc chương 9
 Đọc file 04_FloatingPoint.doc
 Trả lời các câu hỏi:
 Overflow, underflow?
 Cộng trừ nhân chia trên số thực?
 Quy tắc làm tròn?
 NaN: nguyên tắc phát sinh?
 Quiet NaN và Signaling NaN?

File đính kèm:

  • pdfbai_giang_kien_truc_may_tinh_va_hop_ngu_chuong_3_bieu_dien_s.pdf