Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
302,29 KB
Nội dung
Bài 03: Số chấm động Phạm Tuấn Sơn ptson@fit.hcmus.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Vấn đề với biểu diễn số nguyên • Số nguyên N bit biểu diễn 2N giá trị – Biểu diễn không dấu (Unsigned Integer) 2N – (N=32, 2N–1 = 4,294,967,295) – Biểu diễn bù -2(N-1) 2(N-1) – (N=32, 2(N-1) = 2,147,483,648) • Biểu diễn số lớn ? Số giây / nghìn năm – 31,556,926,000 (3.1556926 x 1010) • Biểu diển số nhỏ ? Số giây / nano giây – 0.00000000110 (1.010 x 10-9) • Biểu diễn số thập phân 1.5 ? CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu diễn phần thập phân • Biểu diễn số 5.375 ? Cần bit ? • Giả sử dùng bit để lưu trữ phần nguyên = + = 00000101 • Tương tự dùng bit lưu trữ phần thập phân 0.375 = 0.25 + 0.125 = 01100000 • Vậy biểu diễn 5.375 = 00000101.01100000 • Tổng qt ta có: xn −1 K x1 x0 x−1 x−2 K x− m = n ∑ i =− m xi 2i i 2-i 10 11 12 13 14 15 1.0 0.5 1/2 0.25 1/4 0.125 1/8 0.0625 1/16 0.03125 1/32 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 0.0001220703125 0.00006103515625 0.000030517578125 => Biểu diển số chấm tĩnh (fixed point) CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới hạn biểu diễn số chấm tĩnh • Với bit – Phần nguyên lớn biểu diễn 28 - 1= 255 – Phần thập phân nhỏ biểu diễn 2-8 = 1/256 = 0.00390625 ~ 10-3 • Nếu muốn tính tốn với số nhỏ 0.000110 hay 0.0000110 ? Tăng số bit Với 16 bit phần thập phân = 1/65536 = 0.0000152587890625 ~ 10-5 • Có cách tốt ? CuuDuongThanCong.com https://fb.com/tailieudientucntt Số chấm động – Ý tưởng • Hệ thập phõn 123000000000 ~ 1.23ì1011 v 0.0000000000123 ~ 1.23ì10-11 Tương tự với hệ nhị phân, ta có x = 00000101.01100000 = 22 + 20 + 2-2 + 2-3 • Ta viết lại x = 1.01011 × 22 • Thay dùng 16 bit để lưu trữ, cần dùng bit (5 bit phần trị + bit phần mũ) x = 1.01011 10 • Như vậy, – Muốn tiết kiệm số bit lưu trữ, ta di chuyển vị trí dấu chấm sang phải 14 vị trí – Cần lưu: phần trị, phần mũ …phần dấu => Đây ý tưởng số chấm động (floating point) CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu diễn số chấm động • Biểu diễn số chấm động S Exponent bit m bits Significand n bits – Sign (S): phần dấu – Exponent (E): phần số mũ – Significand (S): phn nh tr Giỏ tr Sì2E CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu diễn khoa học • Giá trị / 1,000,000,000 biểu diễn sau: – 1.010 × 10-9 Dạng chuẩn (Normalized form) – 0.110 × 10-8, 10.010 × 10-10 Dạng khơng chuẩn (Denormalized form) • Dạng chuẩn: phần nguyên gồm chữ số khác decimal point 6.0210 x 1023 radix (base) mantissa 1.02 x 2-1 exponent “binary point” CuuDuongThanCong.com https://fb.com/tailieudientucntt Chuẩn số chấm động IEEE 754 • Biểu diễn số chấm động Single Precision (32 bit) 31 30 23 22 S Exponent bit bits Significand 23 bits – S: dấu (Sign) – 0: dương, 1: âm – Exponent: phần số mũ (lưu dạng số biased) – Significand: phần định trị • Ngầm định bắt đầu + phần trị ~ (1 + 23) bits • Dạng chuẩn: +/-1.xxxx2ì2yyyy2 Vớ d: Biu din: 10000001 01011000000000000000000 Cú giá trị: +1.0101100…00×210000001 ~ +(1+2-2 + 2-4 + 2-5) ×22 = 5.375 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chuyển từ biểu diễn nhị phân sang thập phân 0110 1000 101 0101 0100 0011 0100 0010 • Dấu: dương • Mũ: – 0110 1000 có giá trị (dạng biased) 104 - 127 = -23 • Trị: + 1x2-1+ 0x2-2 + 1x2-3 + 0x2-4 + 1x2-5 + =1+2-1+2-3 +2-5 +2-7 +2-9 +2-14 +2-15 +2-17 +2-22 = 1.0 + 0.666115 • Kết quả: 1.666115×2-23 ~ 1.986×10-7 (~ 2/10,000,000) CuuDuongThanCong.com https://fb.com/tailieudientucntt Chuyển từ biểu diễn thập phân sang nhị phân -2.340625 x 101 Khơng chuẩn hóa: -23.40625 Chuyển phần nguyên: 23 = 16 + + + = 10111 Chuyển phần thập phân: 40625 = 25 + 125 + 03125 = 01101 Kết hợp chuẩn hóa: 10111.01101 = 1.011101101 x 24 Chuyển phần mũ: 127 + = 10000011 1000 0011 011 1011 0100 0000 0000 0000 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Những trường hợp tạo số đặc biệt X + (+∞) X – (+∞) X + (–∞) X – (–∞) X × (+∞) X / (–∞) (+∞) + (+∞) (–∞) + (–∞) (–∞) – (+∞) 10.(+∞) – (–∞) 11.(+∞) + (–∞) 21.………… 12.(–∞) + (+∞) 13.(+∞) – (+∞) 14.(–∞) – (–∞) 15.∞ × 16.∞ / 17.X / 18.0 / 19.∞ / ∞ 20.sqrt(X), X f(2,3) 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt Số dạng khơng chuẩn • Số dương nhỏ biểu diễn a = 1.0… × 2-126 = 2-126 Gaps! - a + Lý do: ngầm định + phần trị • Giải pháp: – Qui ước số mũ = (phần trị ≠ 0), không ngầm định bắt đầu Số dạng không chuẩn (denormalized) – Số dương nhỏ biểu diễn • a = 0.00…12 × 2-126 = 2-23 × 2-126 = 2-149 CuuDuongThanCong.com + 16 https://fb.com/tailieudientucntt Một số loại chấm động • Single Precision (32 bit) – 1/8/23 (kiểu float C), 10-38 1038 • Double Precision (64 bit) – 1/11/52 (kiểu double C), 10-308 10308 • Half Precision (16 bit) – 1/5/10 • Quad Precision (8 bit) – 1/4/3 • IEEE 754-2008 “binary128” (128 bit) – 1/15/112 en.wikipedia.org/wiki/Floating_point 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt Biểu diễn số chấm động bit 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt Bảng tóm tắt số chấm động Single Precision (32 bit) Double Precision (64 bit) Dấu Mũ Trị Giá trị Dấu Mũ Trị Giá trị +0 0 0 0 0 –0 0 -0 0 -0 +∞ 255 (toàn bit 1) ∞ 2047 (toàn bit 1) ∞ –∞ 255 (toàn bit 1) -∞ 2047 (toàn bit 1) -∞ Quiet NaN 0/ 255 (toàn bit 1) ≠0 NaN 0/ 2047 (toàn bit 1) ≠0 NaN Signaling NaN 0/ 255 (toàn bit 1) ≠0 NaN 0/ 2047 (toàn bit 1) ≠0 NaN Số dương (dạng chuẩn) 0