>> DAVID MALAN: Ας δούμε τώρα φυσήξει το μυαλό σας.
Αποδεικνύεται στον πραγματικό κόσμο 1 χωρίζεται κατά 10 είναι πράγματι 1/10, ή 0.1.
Αλλά σε υπολογιστές που έχουν περιορισμένη μόνο αριθμό των bits με τα οποία να
αντιπροσωπεύσει τους αριθμούς, δεν μπορείς πάντα αντιπροσωπεύσει τους αριθμούς όπως 1/10 με
απόλυτη ακρίβεια.
Με άλλα λόγια, οι υπολογιστές έχουν μερικές φορές να κάνει τις κλήσεις κρίσης και όχι
αναγκαστικά αντιπροσωπεύουν τον αριθμό σας θέλουν, όπως ακριβώς όπως επιθυμείτε.
>> Για παράδειγμα, ας υποθέσουμε ότι πάω πίσω στο αυτό το πρόγραμμα και να αλλάξετε το 0,1,
OH, 0.28, υποδεικνύοντας έτσι ότι Θα ήθελα να printf printf να
28 θέσεις της ακρίβειας.
Ας τώρα να αποθηκεύσετε και να καταρτίσει το πρόγραμμα, αυτή τη φορά με τη μάρκα floats2.
Τρέξτε με dot κάθετο floats2.
Και, Θεέ μου, αυτή τη φορά δεν βλέπω 0.1, αλλά 0.10000000, η ​​οποία είναι αρκετά
καλά μέχρι στιγμής.
Στη συνέχεια, όμως, 14901161193847656250.
>> Λοιπόν, τι συμβαίνει;
Λοιπόν, αποδεικνύεται ότι ένας πλωτήρας είναι αποθηκεύονται συνήθως στο εσωτερικό του υπολογιστή
με 32 bits.
32 είναι προφανώς ένας πεπερασμένος αριθμός, η οποία σημαίνει ότι θα μπορεί να εκπροσωπεί μόνο
με 32 bits ένα πεπερασμένο αριθμό τιμών κινητής υποδιαστολής.
Δυστυχώς, αυτό σημαίνει ότι η υπολογιστής δεν μπορεί να εκπροσωπεί όλες τις πιθανές
αριθμοί κινητής υποδιαστολής, ή πραγματικούς αριθμούς, που υπάρχουν στον κόσμο,
επειδή έχει μόνο τόσα πολλά κομμάτια.
>> Και έτσι αυτό που ο υπολογιστής είναι προφανώς γίνεται στην περίπτωση αυτή είναι εκπροσωπούν το 1/10 έως
όσο το δυνατόν πλησιέστερα κυμαινόμενο Σημείο αξία που μπορεί.
Αλλά αν κοιτάξουμε, όπως έχουμε εδώ, με 28 δεκαδικά ψηφία, θα αρχίσουμε να βλέπουμε ότι
ασάφεια.
Έτσι, αυτό είναι ένα πρόβλημα με υπάρχει τέλεια λύση.
Μπορούμε να χρησιμοποιήσουμε ένα διπλό αντί ενός πλωτήρα, η οποία τείνει να χρησιμοποιεί 64 bits ως
σε αντίθεση με 32.
Αλλά φυσικά, 64 είναι επίσης πεπερασμένο, οπότε το πρόβλημα θα
παραμένουν ακόμη και με διπλά.