Ποια είναι η διαφορά μεταξύ float και double;

Έχω διαβάσει για τη διαφορά μεταξύ διπλής ακρίβειας και απλής ακρίβειας. Ωστόσο, στις περισσότερες περιπτώσεις, το float και το double φαίνεται να είναι εναλλάξιμα, δηλαδή η χρήση του ενός ή του άλλου δεν φαίνεται να επηρεάζει τα αποτελέσματα. Ισχύει πράγματι αυτό; Πότε οι float και οι doubles είναι εναλλάξιμες; Ποιες είναι οι διαφορές μεταξύ τους;

Ακολουθούν τα πρότυπα C99 (ISO-IEC 9899 6.2.5 §10) ή C++2003 (ISO-IEC 14882-2003 3.1.9 §8):

Υπάρχουν τρεις τύποι κινητής υποδιαστολής: float, double και long double. Ο τύπος double παρέχει τουλάχιστον την ίδια ακρίβεια με τον τύπο float και ο τύπος long double παρέχει τουλάχιστον την ίδια ακρίβεια με τον τύπο double. Το σύνολο των τιμών του τύπου float είναι υποσύνολο του συνόλου των τιμών του τύπου double- το σύνολο των τιμών του τύπου double είναι υποσύνολο του συνόλου των τιμών του τύπου long double.

Το πρότυπο της C++ προσθέτει:

Η αναπαράσταση τιμών των τύπων κινητής υποδιαστολής καθορίζεται από την εφαρμογή.

Θα πρότεινα να ρίξετε μια ματιά στο εξαιρετικό What Every Computer Scientist Should Know About Floating-Point Arithmetic που καλύπτει σε βάθος το πρότυπο κινητής υποδιαστολής IEEE. Θα μάθετε για τις λεπτομέρειες της αναπαράστασης και θα συνειδητοποιήσετε ότι υπάρχει ένας συμβιβασμός μεταξύ μεγέθους και ακρίβειας. Η ακρίβεια της αναπαράστασης κινητής υποδιαστολής αυξάνεται όσο μειώνεται το μέγεθος, επομένως οι αριθμοί κινητής υποδιαστολής μεταξύ -1 και 1 είναι αυτοί με τη μεγαλύτερη ακρίβεια.

Σχόλια (0)
  • Ένα double είναι 64 και μονής ακρίβειας (float) είναι 32 bit.
  • Το double έχει μεγαλύτερη mantissa (τα ακέραια bits του πραγματικού αριθμού).
  • Τυχόν ανακρίβειες θα είναι μικρότερες στο double.
Σχόλια (0)

Οι κινητές μονάδες έχουν μικρότερη ακρίβεια από τις διπλές. Αν και το γνωρίζετε ήδη, διαβάστε Τι πρέπει να γνωρίζουμε για την αριθμητική κινητής υποδιαστολής για καλύτερη κατανόηση.

Σχόλια (2)