1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID Malan: Bây giờ hãy thổi tâm trí của bạn. 3 00:00:01,750 --> 00:00:06,500 Hóa ra trong thế giới thực 1 chia 10 thực sự là 1/10, tương đương 0.1. 4 00:00:06,500 --> 00:00:10,370 Nhưng trong máy tính mà chỉ có một giới hạn số bit mà để 5 00:00:10,370 --> 00:00:14,290 đạ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 6 00:00:14,290 --> 00:00:15,500 độ chính xác hoàn hảo. 7 00:00:15,500 --> 00:00:18,640 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 8 00:00:18,640 --> 00:00:22,740 nhất thiết phải đại diện cho số bạn muốn chính xác như bạn có ý định. 9 00:00:22,740 --> 00:00:27,020 >> Ví dụ, giả sử tôi quay trở lại chương trình này và thay đổi từ 0,1 đến, 10 00:00:27,020 --> 00:00:32,073 oh, 0.28, do đó chỉ ra rằng Tôi muốn printf printf để 11 00:00:32,073 --> 00:00:34,350 28 địa điểm chính xác. 12 00:00:34,350 --> 00:00:39,330 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. 13 00:00:39,330 --> 00:00:41,910 Chạy nó với dấu chấm dấu gạch chéo floats2. 14 00:00:41,910 --> 00:00:49,980 Và, Chúa ơi, lần này tôi không thấy 0.1, nhưng 0.10000000, mà là khá 15 00:00:49,980 --> 00:00:51,070 tốt cho đến nay. 16 00:00:51,070 --> 00:00:57,830 Nhưng sau đó, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Vâng, những gì đang xảy ra? 18 00:00:58,880 --> 00:01:02,280 Vâng, nó chỉ ra rằng một phao là thường được lưu trữ bên trong máy tính 19 00:01:02,280 --> 00:01:03,500 với 32 bit. 20 00:01:03,500 --> 00:01:07,340 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 21 00:01:07,340 --> 00:01:11,050 với 32 bit một số hữu hạn nổi các giá trị điểm. 22 00:01:11,050 --> 00:01:14,980 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ể 23 00:01:14,980 --> 00:01:18,110 số dấu chấm động, hoặc số thực, tồn tại trên thế giới, 24 00:01:18,110 --> 00:01:19,980 bởi vì nó chỉ có rất nhiều bit. 25 00:01:19,980 --> 00:01:23,940 >> 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 26 00:01:23,940 --> 00:01:26,880 các nổi gần nhất có thể giá trị thời điểm đó nó có thể. 27 00:01:26,880 --> 00:01:31,050 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 28 00:01:31,050 --> 00:01:31,970 thiếu chính xác. 29 00:01:31,970 --> 00:01:34,480 Vì vậy, đây là một vấn đề với không có giải pháp hoàn hảo. 30 00:01:34,480 --> 00:01:38,060 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ư 31 00:01:38,060 --> 00:01:39,410 trái ngược với 32. 32 00:01:39,410 --> 00:01:42,290 Nhưng tất nhiên, 64 cũng là hữu hạn, vì vậy vấn đề sẽ 33 00:01:42,290 --> 00:01:43,630 vẫn còn ngay cả với đôi. 34 00:01:43,630 --> 00:01:46,323