Home / Wiki / SysAdmin / Tìm hiểu về double-precision (Dấu phẩy động)

Tìm hiểu về double-precision (Dấu phẩy động)

Trong tin học, dấu phẩy động được dùng để chỉ một hệ thống biểu diễn số mà trong đó sử dụng một chuỗi chữ số (hay bit) để biểu diễn một số hữu tỉ.

Thuật ngữ dấu phẩy động xuất phát từ chỗ hệ thống dấu phẩy động có dấu phẩy cơ số (tức là dấu phẩy thập phân trong trường hợp dùng hệ thập phân thường ngày hoặc là dấu phẩy nhị phân trong trường hợp dùng bên trong máy tính) không cố định mà có thể thay đổi vị trí của nó bất kỳ đâu trong các chữ số có nghĩa của số cần được biểu diễn. Vị trí này được mô tả một cách độc lập trong biểu diễn cụ thể của từng số. Đã có nhiều hệ thống dấu phẩy động khác nhau được dùng trong máy tính; tuy nhiên, vào khoảng hai mươi năm trở lại đây thì hầu hết các máy tính đều dùng cách biểu diễn tuân thủ theo chuẩn IEEE 754.

Một điều cần lưu ý là có sự khác biệt khi gọi tên dấu phẩy cơ số: ở Việt Nam, chúng ta dùng dấu phẩy để ngăn cách giữa phần nguyên và phần thập phân; trong khi các nước như Mỹ, Anh,…dùng dấu chấm để làm điều này. Chính vì thế, thuật ngữ tương ứng với dấu phẩy động ở tiếng Anh là floating point mà dịch sát ra tiếng Việt phải là dấu chấm động. Các phần sau, ta vẫn dùng thuật ngữ dấu phẩy động nhưng khi biểu diễn các số trong ví dụ thì vẫn mô tả theo quy ước của các nước nói trên (mà cũng là quy ước chuẩn dùng trong máy tính), nghĩa là vẫn dùng dấu chấm thay cho dấu phẩy.

Ưu điểm của cách biểu diễn dấu phẩy động là nó cho phép biểu diễn một tầm giá trị rộng hơn nhiều so với cách biểu diễn dấu phẩy tĩnh. Lấy ví dụ, nếu cách biểu diễn dấu phẩy tĩnh có bảy chữ số thập phân với quy ước dấu phẩy thập phân luôn nằm cố định ở chữ số thứ năm, thì cách biểu diễn dấu phẩy tĩnh có thể mô tả các số như 12345.67, 8765.43, 123.00 (tức 00123.00) và vân vân. Trong khi đó cách biểu diễn dấu phẩy động (chẳng hạn như định dạng decimal32 của IEEE 754) với bảy chữ số thập phân ngoài việc mô tả được các số nói trên còn mô tả được nhiều số khác mà dấu phẩy tĩnh không mô tả được như 1.234567, 123456.7, 0.00001234567, 1234567000000000, và nhiều nữa. Tất nhiên, định dạng theo kiểu dấu phẩy động cần thêm bộ nhớ hơn so với dấu phẩy tĩnh (vì cần có thêm bộ nhớ để mô tả vị trí của dấu phẩy cơ số), nhưng ta có thể nói: với cùng một không gian bộ nhớ, cách biểu diễn dấu phẩy động đạt được tầm mô tả rộng hơn.

Tốc độ các phép toán làm việc với số dấu phẩy động là một thước đo quan trọng nhằm đánh giá khả năng của một máy tính trong nhiều ứng dụng khác nhau. Đơn vị đo về tốc độ này là FLOPS.

Tầm biểu diễn của các số dấu phẩy động

Bằng cách cho phép vị trí của dấu phẩy cơ số điều chỉnh được, cách biểu diễn dấu phẩy động giúp người sử dụng thực hiện các phép toán trên một tầm rộng về biên độ ứng với một số cố định chữ số mà vẫn duy trì được độ chính xác tốt. Ví dụ, trong hệ thống dấu phẩy động thập phân có phần định trị là ba chữ số và phần mũ là một chữ số (tổng cộng tài nguyên hiển thị cho một con số là 4 chữ số), phép nhân mà con người chúng ta thường viết

0.12 × 0.12 = 0.0144

sẽ được mô tả ở dạng dấu phẩy động như sau:

(1.20×10−1) × (1.20×10−1) = (1.44×10−2).

Nếu thực hiện phép nhân nói trên trong một hệ thống dấu phẩy tĩnh có tài nguyên hiển thị là 4 chữ số với quy ước dấu phẩy thập phân luôn ở phía sau chữ số đầu tiên bên trái thì kết quả sẽ là

0.120 × 0.120 = 0.014.

Rõ ràng một chữ số của kết quả sẽ bị mất đi do chỉ có 4 chữ số để hiển thị và quan trọng hơn là dấu phẩy thập phân không linh hoạt, bị quy ước cố định trong dãy chữ số. Tầm hiển thị của số dấu phẩy động phụ thuộc vào số bit hay số chữ số của phần định trị và của phần số mũ. Trên hệ thống máy tính thông thường, một số dấu phẩy động nhị phân định dạng ‘độ chính xác kép’ (64 bit) có phần định trị 52 bit (thực ra là 53 bit vì trong đó có một bit 1 luôn luôn có nhưng không thể hiện tường minh, điều này cũng giống định dạng độ chính xác đơn đã trình bày ở trên), phần số mũ gồm 11 bit và 1 bit dấu. Tầm số dương mà định dạng này có thể biểu diễn được là khoảng từ 10−308 đến 10308 (vì 308 xấp xỉ bằng 1023 × log10(2) và tầm số mũ của định dạng độ chính xác kép là [−1022,1023]). Toàn tầm hiển thị của định dạng độ chính xác kép là khoảng từ −10308 đến +10308 (xem IEEE754).

Một hệ thống số dấu phẩy động F(b, p, l, u) (ở đây b là cơ số của hệ thống, p là độ chính xác của hệ thống – tức là số chữ số có trong phần định trị kể cả bit không hiển thị tường minh nhưng ngầm hiểu, l và u lần lượt là số mũ nhỏ nhất và lớn nhất mà hệ thống có thể biểu diễn được) có thể biểu diễn được một số lượng các con số chuẩn hóa theo công thức sau:

2* (b-1) * b ^ (p-1) * (u – l + 1)

Có một số dương nhỏ nhất trong các số dấu phẩy động chuẩn hóa và được gọi là mức tràn dưới (underflow level) = UFL = b^l. UFL có bit 1 (không hiển thị tường minh và hiểu ngầm) ở vị trí trước dấu chấm cơ số của phần định trị, các bit còn lại của phần định trị bằng 0 và phần mũ có giá trị nhỏ nhất.

Có một số dương lớn nhất trong các số dấu phẩy động chuẩn hóa và được gọi là mức tràn trên (overflow level) = OFL = b^(u+1) * (1-b^(-p)). OFL có giá trị mỗi chữ số ở phần định trị đều bằng (b-1) và phần mũ có giá trị lớn nhất.

Hơn nữa, còn có những giá trị mà hệ thống dấu phẩy động có thể biểu diễn được. Đó là một số giá trị nằm giữa –UFL và UFL. Các số này là zero, zero âm, cũng như các số không chuẩn hóa.

ThuanNguyen.Net

About Thuận Nguyễn

Check Also

Kiến thức cơ bản về SSD: PCI-Express, M.2, mSATA và SATA Express

Hiện nay SSD đã trở nên phổ biến không chỉ ở các máy chủ đắt …

Leave a Reply

Your email address will not be published. Required fields are marked *