Khác biệt giữa bản sửa đổi của “Số thực dấu phẩy động”

Nội dung được xóa Nội dung được thêm vào
n clean up, replaced: → (9) using AWB
Dòng 16:
Có một số cách dùng chuỗi các chữ số để biểu diễn các con số. Theo ký hiệu toán học thông dụng, chuỗi chữ số có thể có chiều dài tùy ý, và vị trí của [[dấu phẩy cơ số]] được chỉ ra bằng cách đặt một ký tự rõ ràng (đó là dấu chấm đối với các nước Anh, Mỹ… hoặc là dấu phẩy đối với Việt Nam). Trong trường hợp chuỗi chữ số không có dấu phẩy thì nó được xem như đặt ở phía cuối bên phải của chuỗi chữ số (tức là, số đang biểu diễn là [[một số nguyên]]). Trong trường hợp máy tính thì với chỉ hai bit 0 và 1, không thể có một ký tự rõ ràng phân biệt để mô tả dấu phẩy. Trong hệ thống [[dấu phẩy tĩnh]], người ta quy ước vị trí cố định của dấu phẩy cơ số trong chuỗi chữ số. Lấy ví dụ, quy ước rằng chuỗi chữ số gồm 8 chữ số thập phân và dấu phẩy thập phân luôn nằm ở ngay giữa chuỗi thì khi đọc giá trị "00012345" ta phải ngầm hiểu đây là số có giá trị 1.2345.
 
Trong [[ký hiệu khoa học]], một con số thường được lấy tỉ lệ (tức được nhân) với một lũy thừa của 10 sao cho kết quả sau khi lấy tỉ lệ nằm trong một tầm cho trước – điển hình là nằm trong khoảng 1 và 10, tức là kết quả sẽ được viết ra với dấu phẩy cơ số nằm trực tiếp sau chữ số đầu tiên. Để người đọc có thể biết giá trị thực của con số, lũy thừa của 10 sẽ được viết riêng ra ở cuối kết quả. Lấy ví dụ, chu kỳ xoay mặt trăng [[Io (vệ tinh)|Io]] của hành tinh [[Mộc Tinh]] là 152853.5047 [[giây]]. Khi đó, con số này được biểu diễn dưới dạng ký hiệu khoa học chuẩn là 1.528535047{{e|5}} giây.
 
Cách biểu diễn số dấu phẩy động tương tự với cách dùng trong ký hiệu khoa học. Mô tả luận lý thì một số dấu phẩy động bao gồm:
Dòng 35:
với ''S'' là giá trị nguyên của toàn bộ phần định trị mà chưa đặt dấu phẩy cơ số và ''p'' là độ chính xác – số chữ số của phần định trị.
 
Khi dùng cách biểu diễn dấu phẩy động, phương pháp lưu trữ phần định trị, số mũ và bit dấu bên trong máy tính tùy thuộc vào mỗi loại máy theo chuẩn nào. Hiện nay, chuẩn IEEE 754 là thông dụng nhất sẽ được mô tả ở phần sau. Nhưng ở đây, chúng ta thử xét định dạng nhị phân độ chính xác đơn (32 bit) của IEEE754. Theo chuẩn này thì một số dấu phẩy động định dạng độ chính xác đơn sẽ có 32 bit bao gồm: 1 bit dấu, 23 bit cho phần định trị và 8 bit cho phần số mũ.Lấy ví dụ, 33 bit đầu tiên của số [[pi|π]] là 11.001001 00001111 11011010 10100010 0 (lưu ý dấu phẩy cơ số nằm ở sau bit 1 thứ hai từ bên trái qua). Để biểu diễn số [[pi|π]] này ở định dạng IEEE 754 độ chính xác đơn, ta phải làm tròn chuỗi bit nói trên còn 24 bit (tại sao lại là 24 bit trong khi phần định trị của định dạng chính xác đơn chỉ có 23 bit sẽ được giải thích ngay sau đây). Để làm tròn như vậy, ta kết hợp các giá trị của bit thứ 24 và bit thứ 25 để được giá trị 11.001001 00001111 11011011. Yêu cầu của chuẩn IEEE 754 là phần định trị phải có giá trị nằm trong khoảng từ 1 đến 2 (tức là chuẩn IEEE 754 quy ước dấu chấm cơ số luôn luôn nằm ngay sau bit 1 đầu tiên). Chính vì thế ta phải lấy tỉ lệ kết quả làm tròn thành 1.1001001 00001111 11011011với số mũ ''e'' = 1. Đến đây, vì bit đầu tiên (và cũng là duy nhất) đứng trước dấu phẩy cơ số của phần định trị luôn luôn là 1 nên ta không cần lưu trữ bit này và viết gọn phần định trị là 1001001 00001111 11011011. Khi đó, số bit của phần định trị chỉ còn 23 bit khớp với số bit được chuẩn IEEE 754 dùng cho phần định trị. Để xác định giá trị của π, ta dùng công thức
:<math>(1+\sum_{n=1}^{p-1} bit_n\times 2^{-n})\times 2^e=(1+1\times 2^{-1}+0\times 2^{-2}+1\times 2^{-4}+1\times2^{-7}+\dots +1\times 2^{-23})\times 2^1=1.5707964\times 2</math>
với n là bit thứ n của phần định trị. Quá trình lấy tỉ lệ phần định trị sao cho giá trị của nó phải nằm trong khoảng từ 1 đến 2 và bỏ không lưu trữ bit 1 đầu tiên được gọi là ''chuẩn hóa''. Ta có thể xem việc chuẩn hóa giống như một dạng của nén; nó cho phép ta thực hiện lưu trữ 24 bit định trị trong một trường chỉ có 23 bit với lưu ý rằng luôn luôn có một bit 1 ở trước dấu phẩy cơ số.
Dòng 43:
* Cách biểu diễn [[dấu phẩy tĩnh]] dùng phần cứng làm việc với các số nguyên với phần mềm quy định vị trí cụ thể của dấu phẩy thập phân hay nhị phân, chẳng hạn, quy định rõ dấu phẩy nằm ở ngay sau 6 bit hay 6 chữ số kể từ bên phải. Phần cứng thực hiện trên cách biểu diễn này đơn giản hơn so với phần cứng cần có trong dấu phẩy động và thông thường được dùng để thực thi các phép toán số nguyên. Đặc biệt, dấu phẩy tĩnh nhị phân thường được dùng trong những ứng dụng riêng biệt trên các bộ vi xử lý nhúng mà chỉ cần làm các phép toán số học nguyên, còn dấu phẩy tĩnh thập phân thì thường dùng trong các ứng dụng thương mại.
* [[Số thập phân mã theo kiểu nhị phân|Mã BCD]] là một cách mã hóa các số thập phân bằng cách thay mỗi chữ số thập phân bằng một dãy số nhị phân đại diện cho chữ số đó.
* Khi cần độ chính xác cao hơn, các phép toán cho dấu phẩy động có thể được sửa đổi bằng phần mềm sao cho phần định trị của dấu phầy động có thể thay đổi chiều dài tức có thể tăng hay giảm tùy theo phần mềm. Phương pháp này gọi là [[số học có độ chính xác thay đổi|độ chính xác thay đổi]], hay còn gọi là số học "bignum có tỉ lệ".
* [[Các hệ thống số học máy tính]] chẳng hạn như [[Mathematica]], [[Maple]] và [[Maxima]] thường cho phép làm việc trên các số vô tỉ như <math>\pi</math> hay <math>\sqrt{3}</math> theo một kiểu hình thức nghĩa là giống như ta làm việc với một ký hiệu toán học thuần túy mà không cần phải chuyển các số nói trên ra dạng gần đúng dấu phẩy động. Những phần mềm như vậy có thể tính toán các biểu thức chẳng hạn như "<math>\sin 3\pi</math>" một cách chính xác, bởi vì chúng được lập trình để "hiểu" ý nghĩa toán học của các ký hiệu này.
* Một cách biểu diễn nữa dựa trên [[logarith tự nhiên]] mà đôi khi được dùng trong những ứng dụng dựa trên [[Field-programmable gate array|FPGA]] mà trong đó hầu hết các phép toán số học cần làm là toán nhân và toán chia.<ref>{{chú thích tạp chí|title=Comparing Floating-point and Logarithmic Number Representations for Reconfigurable Acceleration|author=Haohuan Fu, Oskar Mencer, Wayne Luk| url=http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4042464 |journal=IEEE Conference on Field Programmable Technology|month=December | year=2006}}</ref>. Giống như biểu diễn dấu phẩy động, cách biểu diễn này cho độ chính xác tốt hơn trong trường hợp các toán hạng nhỏ hơn cũng như có tầm biểu diễn rộng hơn.
 
== Tầm biểu diễn của các số dấu phẩy động ==
Dòng 57:
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<sup>−308</sup> đến 10<sup>308</sup> (vì 308 xấp xỉ bằng 1023 × log<sub>10</sub>(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ừ −10<sup>308</sup> đến +10<sup>308</sup> (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.
Dòng 81:
{{chính|IEEE 754-2008}}
 
Hiệp hội [[IEEE]] đã chuẩn hóa cho việc biểu diễn số dấu phẩy động nhị phân trong máy tính bằng cách đưa ra chuẩn [[IEEE 754-2008|IEEE 754]]. Ngày nay hầu hết các máy tính đều tuân thủ theo chuẩn này. Một số trường hợp ngoại lệ như máy tính lớn IBM và máy vector Cray. Loại máy tính lớn IBM ngoài định dạng thập phân và nhị phân IEEE 754 còn có một [[Kiến trúc dấu phẩy động của IBM|định dạng riêng của IBM]]. Còn với máy vector Cray thì họ [[Cray T90|T90]] có một phiên bản IEEE nhưng máy [[Cray SV1|SV1]] vẫn còn dùng định dạng dấu phẩy động của chính Cray.
 
Chuẩn IEEE 754 đưa ra nhiều định dạng rất gần nhau, chỉ khác nhau ở một ít chi tiết. Năm trong số những định dạng này được gọi là ''định dạng cơ bản'', và hai trong chúng đặc biệt được dùng rộng rãi trong cả phần cứng máy tính và ngôn ngữ lập trình:
Dòng 161:
==== Số không có dấu ====
{{chính|Số không có dấu}}
Trong chuẩn IEEE 754, số không có dấu, nghĩa là có đến hai số không: số "không dương" (+0) và số "không âm" (-0). Trong hầu hết các [[môi trường thực thi]], số không dương thường được xuất hiện là "0", trong khi số không âm có thể được in là "-0". Hai giá trị này được xem là bằng nhau về mặt giá trị nhưng một vài phép toán sẽ thông báo kết quả phân biệt giữa +0 và -0. Lấy ví dụ, a/(-0) sẽ cho ra kết quả là vô cực âm còn a/(+0) sẽ cho kết quả là vô cực dương với a là một số dương. Trường hợp a là số âm thì kết quả ngược lại. Tuy nhiên, hai phép toán này khi thông báo kết quả cũng kèm theo thông báo trường hợp ngoại lệ "chia cho số không". Một phép toán arrcot có tính đối xứng dấu chẳng hạn sẽ cho các kết quả khác nhau cho hai trường hợp +0 và -0 mà không có bất kỳ thông báo ngoại lệ nào hết. Sự khác biệt giữa +0 và -0 dễ nhận thấy trong các phép toán phức tạp tại cái gọi là [[lát cắt rẽ nhánh]].
 
{{thiếu nguồn gốc}}