Không thực sự cụ thể đối với việc triển khai của Python nhưng nên áp dụng cho bất kỳ hàm float nào trong chuỗi thập phân.
Số dấu phẩy động thực chất là số nhị phân, nhưng theo ký hiệu khoa học với giới hạn cố định của các số liệu có ý nghĩa.
Nghịch đảo của bất kỳ số nào có yếu tố số nguyên tố không được chia sẻ với cơ sở sẽ luôn dẫn đến biểu diễn điểm chấm định kỳ. Ví dụ 1/7 có thừa số nguyên tố 7, không được chia sẻ với 10 và do đó có biểu diễn thập phân định kỳ và điều này cũng đúng với 1/10 với các thừa số nguyên tố 2 và 5, yếu tố sau không được chia sẻ với 2 ; điều này có nghĩa là 0,1 không thể được biểu diễn chính xác bằng số bit hữu hạn sau điểm chấm.
Vì 0,1 không có biểu diễn chính xác, nên một hàm chuyển đổi xấp xỉ thành chuỗi dấu thập phân thường sẽ cố gắng xấp xỉ các giá trị nhất định để chúng không nhận được kết quả không trực quan như 0.1000000000004121.
Vì dấu phẩy động nằm trong ký hiệu khoa học, bất kỳ phép nhân nào với lũy thừa của cơ sở chỉ ảnh hưởng đến phần số mũ của số. Ví dụ: 1.231e + 2 * 100 = 1.231e + 4 cho ký hiệu thập phân và tương tự, 1.00101010e11 * 100 = 1.00101010e101 trong ký hiệu nhị phân. Nếu tôi nhân với một sức mạnh không phải của cơ sở, các chữ số có nghĩa cũng sẽ bị ảnh hưởng. Ví dụ: 1,2e1 * 3 = 3,6e1
Tùy thuộc vào thuật toán được sử dụng, nó có thể cố gắng đoán các số thập phân phổ biến chỉ dựa trên các số liệu quan trọng. Cả 0,1 và 0,4 có cùng một số liệu có ý nghĩa trong nhị phân, bởi vì các phao của chúng về cơ bản là cắt ngắn (8/5) (2 ^ -4) và (8/5) (2 ^ -6). Nếu thuật toán xác định mẫu sigfig 8/5 là số thập phân 1.6, thì nó sẽ hoạt động trên 0,1, 0,2, 0,4, 0,8, v.v. Nó cũng có thể có các mẫu sigfig ma thuật cho các kết hợp khác, chẳng hạn như float 3 chia cho float 10 và các mẫu ma thuật khác có khả năng thống kê được hình thành bằng cách chia cho 10.
Trong trường hợp 3 * 0,1, một vài con số quan trọng cuối cùng có thể sẽ khác với việc chia phao 3 cho phao 10, khiến thuật toán không thể nhận ra số ma thuật cho hằng số 0,3 tùy thuộc vào khả năng chịu mất độ chính xác của nó.
Chỉnh sửa:
https://docs.python.org/3.1/tutorial/floatingpoint.html
Thật thú vị, có nhiều số thập phân khác nhau có chung phân số nhị phân gần đúng nhất. Ví dụ: các số 0.1 và 0.10000000000000001 và 0.1000000000000000055511151231257827021181583404541015625 đều được xấp xỉ bằng 3602879701896394/2 ** 55. Vì tất cả các giá trị thập phân này đều có cùng một giá trị gần đúng. ) == x.
Không có dung sai cho độ mất độ chính xác, nếu float x (0.3) không chính xác bằng float y (0.1 * 3), thì repr (x) không chính xác bằng repr (y).