>> DAVID Malan: Bây giờ hãy thổi tâm trí của bạn.
Hóa ra trong thế giới thực 1 chia 10 thực sự là 1/10, tương đương 0.1.
Nhưng trong máy tính mà chỉ có một giới hạn số bit mà để
đại diện cho số, bạn có thể không luôn luôn đại diện cho số như 1/10 với
độ chính xác hoàn hảo.
Nói cách khác, các máy tính đôi khi có thực hiện cuộc gọi bản án và không
nhất thiết phải đại diện cho số bạn muốn chính xác như bạn có ý định.
>> Ví dụ, giả sử tôi quay trở lại chương trình này và thay đổi từ 0,1 đến,
oh, 0.28, do đó chỉ ra rằng Tôi muốn printf printf để
28 địa điểm chính xác.
Bây giờ chúng ta tiết kiệm và biên dịch chương trình, thời gian này với make floats2.
Chạy nó với dấu chấm dấu gạch chéo floats2.
Và, Chúa ơi, lần này tôi không thấy 0.1, nhưng 0.10000000, mà là khá
tốt cho đến nay.
Nhưng sau đó, 14901161193847656250.
>> Vâng, những gì đang xảy ra?
Vâng, nó chỉ ra rằng một phao là thường được lưu trữ bên trong máy tính
với 32 bit.
Rõ ràng 32 là một số hữu hạn, mà ngụ ý rằng bạn chỉ có thể đại diện cho
với 32 bit một số hữu hạn nổi các giá trị điểm.
Thật không may, điều đó có nghĩa rằng máy tính không thể đại diện cho tất cả có thể
số dấu chấm động, hoặc số thực, tồn tại trên thế giới,
bởi vì nó chỉ có rất nhiều bit.
>> Và vì vậy những gì máy tính là rõ ràng thực hiện trong trường hợp này là đại diện cho 1/10 đến
các nổi gần nhất có thể giá trị thời điểm đó nó có thể.
Nhưng nếu chúng ta nhìn, như chúng ta có ở đây, đến 28 chữ số thập phân, chúng ta bắt đầu thấy rằng
thiếu chính xác.
Vì vậy, đây là một vấn đề với không có giải pháp hoàn hảo.
Chúng ta có thể sử dụng một đôi thay vì một phao, mà có xu hướng sử dụng 64 bit như
trái ngược với 32.
Nhưng tất nhiên, 64 cũng là hữu hạn, vì vậy vấn đề sẽ
vẫn còn ngay cả với đôi.