Hướng dẫn thực hành môn Kiến trúc máy tính & Hợp Ngữ - Khảo sát số chấm động của các ngôn ngữ lập trình trên nền kiến trúc x86

Hầu hết các ngôn ngữ lập trình trên nền kiến trúc x86 như Assembly, C/C++, Java, VB, C#,…
đều sử dụng chuẩn số chấm động IEEE 754 để biểu diễn số chấm động. Trong đó, chuẩn số chấm
động 32-bit (single – chính xác đơn) và chuẩn 64-bit (double – chính xác kép) được sử dụng phổ
biến nhất. Ví dụ trong ngôn ngữ C, kiểu float sử dụng số chấm động 32-bit, kiểu double sử dụng số
chấm động 64-bit. 

 

 


 

pdf 3 trang xuanthi 28/12/2022 3360
Bạn đang xem tài liệu "Hướng dẫn thực hành môn Kiến trúc máy tính & Hợp Ngữ - Khảo sát số chấm động của các ngôn ngữ lập trình trên nền kiến trúc x86", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfhuong_dan_thuc_hanh_mon_kien_truc_may_tinh_hop_ngu_khao_sat.pdf

Nội dung text: Hướng dẫn thực hành môn Kiến trúc máy tính & Hợp Ngữ - Khảo sát số chấm động của các ngôn ngữ lập trình trên nền kiến trúc x86

  1. Hướng dẫn thực hành môn KTMT Khảo sát số chấm động Hướng dẫn: - Viết hàm forceFloat(float *p, char *s) trên ngôn ngữ C++ cho phép ghi các bit cào một vùng nhớ kiểu float o Ví dụ trong chương trình có khai báo biến float x thì khi gọi forceFloat(&x, “10011”), 5 bit cao nhất (LSB) của vùng bộ nhớ 32 bit chiếm bởi x sẽ bị ghi giá trị lần lượt là 1,0,0,1,1 còn các bit còn lại sẽ được gán giá trị 0. Giả định chuỗi s chỉ chứa các ký tự 0 hoặc 1 và có độ dài không quá 32 Bài 3: Dùng 2 hàm đã viết để khảo sát các câu hỏi: - 1.3E+20 có biểu diễn nhị phân ra sao - Số float nhỏ nhất lớn hơn 0 là số nào? Biểu diễn nhị phân của nó? - Những trường hợp nào tạo ra các số đặc biệt (kiểu float) (viết chương trình thử nghiệm và giải thích kết quả): o Số vô cùng (inf) o Số báo lỗi NaN o Ví dụ: X – (+ ), (+ ) – (+ ), X/0, 0/0, / , sqrt(X) với X int -> float.Kết quả như ban đầu ? 2. Chuyển đổi int -> float -> int. Kết quả như ban đầu ? 3. Phép cộng số chấm động có tính kết hợp ? (x+y)+z = x+(y+z) Với i là biến kiểu int, f là biến kiểu float 4. i = (int) (3.14159 * f); 5. f = f + (float) i; 6. if (i == (int)((float) i)) { printf(“true”); } 7. if (i == (int)((double) i)) { printf(“true”); } 8. if (f == (float)((int) f)) { printf(“true”); } 9. if (f == (double)((int) f)) { printf(“true”); } Hướng dẫn thuật toán Cách 1: Thực hiện theo các thuật toán Thuật toán: chuyển từ giá trị số chấm động sang biểu nhị phân. Ví dụ: chuyển -12.625 sang biểu diễn nhị phân 1. Chuyển phần trị sang dạng nhị phân. a. Phần nguyên: theo thuật toán chuyển từ số thập phân sang nhị phân 1210 = 11002 b. Phần thập phân: Lặp lại việc nhân phần thập phân với 2 cho tới khi phần thập phân bằng 0 (hoặc đủ số bit phần trị). Tại mỗi bước nhân, sẽ phát sinh 1 bit tùy thuộc vào phần nguyên của kết quả phép nhân 0.625 2 = 1.25 1 0.25 2 = 0.5 0 0.5 2 = 1.0 1 Như vậy, biểu diễn nhị phân của phần trị: 1100.101 2. Chuẩn hóa 3 1100.101 = 1.100101 2 3. Điền các bit vào các trường theo chuẩn: Dấu: số âm nên bit dấu S = 1 Phần mũ: cộng phần mũ của 2 (tìm được sau bước chuẩn hóa) với phần bias (2k-1-1) Khoa Công Nghệ Thông Tin – Trường ĐH KHTN Tp.HCM - 2 -