1 00:00:00,000 --> 00:00:00,310 2 00:00:00,310 --> 00:00:01,750 >> DAVID MALAN: Ας δούμε τώρα φυσήξει το μυαλό σας. 3 00:00:01,750 --> 00:00:06,500 Αποδεικνύεται στον πραγματικό κόσμο 1 χωρίζεται κατά 10 είναι πράγματι 1/10, ή 0.1. 4 00:00:06,500 --> 00:00:10,370 Αλλά σε υπολογιστές που έχουν περιορισμένη μόνο αριθμό των bits με τα οποία να 5 00:00:10,370 --> 00:00:14,290 αντιπροσωπεύσει τους αριθμούς, δεν μπορείς πάντα αντιπροσωπεύσει τους αριθμούς όπως 1/10 με 6 00:00:14,290 --> 00:00:15,500 απόλυτη ακρίβεια. 7 00:00:15,500 --> 00:00:18,640 Με άλλα λόγια, οι υπολογιστές έχουν μερικές φορές να κάνει τις κλήσεις κρίσης και όχι 8 00:00:18,640 --> 00:00:22,740 αναγκαστικά αντιπροσωπεύουν τον αριθμό σας θέλουν, όπως ακριβώς όπως επιθυμείτε. 9 00:00:22,740 --> 00:00:27,020 >> Για παράδειγμα, ας υποθέσουμε ότι πάω πίσω στο αυτό το πρόγραμμα και να αλλάξετε το 0,1, 10 00:00:27,020 --> 00:00:32,073 OH, 0.28, υποδεικνύοντας έτσι ότι Θα ήθελα να printf printf να 11 00:00:32,073 --> 00:00:34,350 28 θέσεις της ακρίβειας. 12 00:00:34,350 --> 00:00:39,330 Ας τώρα να αποθηκεύσετε και να καταρτίσει το πρόγραμμα, αυτή τη φορά με τη μάρκα floats2. 13 00:00:39,330 --> 00:00:41,910 Τρέξτε με dot κάθετο floats2. 14 00:00:41,910 --> 00:00:49,980 Και, Θεέ μου, αυτή τη φορά δεν βλέπω 0.1, αλλά 0.10000000, η ​​οποία είναι αρκετά 15 00:00:49,980 --> 00:00:51,070 καλά μέχρι στιγμής. 16 00:00:51,070 --> 00:00:57,830 Στη συνέχεια, όμως, 14901161193847656250. 17 00:00:57,830 --> 00:00:58,880 >> Λοιπόν, τι συμβαίνει; 18 00:00:58,880 --> 00:01:02,280 Λοιπόν, αποδεικνύεται ότι ένας πλωτήρας είναι αποθηκεύονται συνήθως στο εσωτερικό του υπολογιστή 19 00:01:02,280 --> 00:01:03,500 με 32 bits. 20 00:01:03,500 --> 00:01:07,340 32 είναι προφανώς ένας πεπερασμένος αριθμός, η οποία σημαίνει ότι θα μπορεί να εκπροσωπεί μόνο 21 00:01:07,340 --> 00:01:11,050 με 32 bits ένα πεπερασμένο αριθμό τιμών κινητής υποδιαστολής. 22 00:01:11,050 --> 00:01:14,980 Δυστυχώς, αυτό σημαίνει ότι η υπολογιστής δεν μπορεί να εκπροσωπεί όλες τις πιθανές 23 00:01:14,980 --> 00:01:18,110 αριθμοί κινητής υποδιαστολής, ή πραγματικούς αριθμούς, που υπάρχουν στον κόσμο, 24 00:01:18,110 --> 00:01:19,980 επειδή έχει μόνο τόσα πολλά κομμάτια. 25 00:01:19,980 --> 00:01:23,940 >> Και έτσι αυτό που ο υπολογιστής είναι προφανώς γίνεται στην περίπτωση αυτή είναι εκπροσωπούν το 1/10 έως 26 00:01:23,940 --> 00:01:26,880 όσο το δυνατόν πλησιέστερα κυμαινόμενο Σημείο αξία που μπορεί. 27 00:01:26,880 --> 00:01:31,050 Αλλά αν κοιτάξουμε, όπως έχουμε εδώ, με 28 δεκαδικά ψηφία, θα αρχίσουμε να βλέπουμε ότι 28 00:01:31,050 --> 00:01:31,970 ασάφεια. 29 00:01:31,970 --> 00:01:34,480 Έτσι, αυτό είναι ένα πρόβλημα με υπάρχει τέλεια λύση. 30 00:01:34,480 --> 00:01:38,060 Μπορούμε να χρησιμοποιήσουμε ένα διπλό αντί ενός πλωτήρα, η οποία τείνει να χρησιμοποιεί 64 bits ως 31 00:01:38,060 --> 00:01:39,410 σε αντίθεση με 32. 32 00:01:39,410 --> 00:01:42,290 Αλλά φυσικά, 64 είναι επίσης πεπερασμένο, οπότε το πρόβλημα θα 33 00:01:42,290 --> 00:01:43,630 παραμένουν ακόμη και με διπλά. 34 00:01:43,630 --> 00:01:46,323