Πραγµατικοί αριθµοί κινητής υποδιαστολής Floating Point Numbers Σ. Τσιτµηδέλης - 2010 ΤΕΙ ΧΑΛΚΙΔΑΣ
Εκθετική Παράσταση (Exponential Notation) Οι επόµενες είναι ισοδύναµες παραστάσεις του 1,234 123,400.0 x 10-2 12,340.0 x 10-1 1,234.0 x 10 0 123.4 x 10 1 12.34 x 10 2 1.234 x 10 3 0.1234 x 10 4
Μέρη πραγµατικού κινητής υποδιαστολής -0.9876 x 10-3 Εκθέτης Πρόσηµο Δεκαδικό σηµείο Σηµαινόµενο τµήµα Πρόσηµο εκθέτη Βάση
IEEE 754 Standard Απλή ακρίβεια (Single precision): 32 bits Πρόσηµο (Sign bit) (1 bit) Εκθέτης (Exponent) (8 bits) Σηµαινόµενο τµήµα (Mantissa) (23 bits) Διπλή ακρίβεια (Double precision): 64 bits Sign bit (1 bit) Exponent (11 bits) Mantissa (52 bits)
Απλή ακρίβεια 32 bits Mantissa (23 bits) Exponent (8 bits) Sign of mantissa (1 bit)
Διπλή ακρίβεια 64 bits Mantissa (52 bits) Exponent (11 bits) Sign of mantissa (1 bit)
Κανονικοποίηση Το σηµαινόµενο τµήµα κανονικοποιείται Έχει ένα υποδηλούµενο δεκαδικό σηµείο στα αριστερά του Έχει ένα υποδηλούµενο 1 αριστερά του δεκαδικού σηµείου Π.χ. Mantissa: Δεκαδικός : 10100000000000000000000 1.101 2 = 1.625 10
Παράσταση πλεονάσµατος (Excess notation) Για να περιλάβουµε και τους θετικούς και τους αρνητικούς εκθέτες χρησιµοποιούµε παράσταση πλεονάσµατος ( excess-n ) ως ακολούθως: Απλή ακρίβεια: πλεόνασµα 127 Διπλή ακρίβεια: πλεόνασµα 1023 Η τιµή του εκθέτη που καταχωρείται είναι µεγαλύτερη από τον πραγµατικό εκθέτη κατά το συµπλήρωµα Π.χ. πλεόνασµα 127, Εκθέτης: Παράσταση : 10000111(=135 10 ) 135 127 = 8 (τιµή)
Παράσταση πλεονάσµατος (Excess notation) - Παράδειγµα - Παράσταση εκθέτη14 10 σε µορφή πλεονάσµατος 127 : 127 10 = + 01111111 2 14 10 = + 00001110 2 Αναπαράσταση = 10001101 2
Παράσταση πλεονάσµατος (Excess notation) - Παράδειγµα - Παράσταση εκθέτη -8 10 σε µορφή πλεονάσµατος 127 : 127 10 = + 01111111 2-8 10 = - 00001000 2 Αναπαράσταση = 01110111 2
Απλή ακρίβεια Παράδειγµα 0 10000010 11000000000000000000000 1.11 2 = 1.75 10 130 127 = 3 0 = positive mantissa +1.75 2 3 = 14.0
Άσκηση 1 Ποια είναι η δεκαδική τιµή που παριστάνει ο επόµενος πραγµατικός σε µορφή 32-bit κινητής υποδιαστολής ; 1 10000010 11110110000000000000000 Απάντηση:
Άσκηση απάντηση Ποια είναι η δεκαδική τιµή που παριστάνει ο επόµενος πραγµατικός σε µορφή 32-bit κινητής υποδιαστολής ; 1 10000010 11110110000000000000000 Απάντηση: -15.6875
ΒΗΜΑ-ΒΗΜΑ 1 10000010 11110110000000000000000 Σε δεκαδική µορφή 130-127 = 3 1.11110110000000000000000000 1 +.5 +.25 +.125 +.0625 + 0 +.015625 +.0078125 1.9609375 2 3 * = 15.6875 ( αρνητικός ) - 15.6875
ΒΗΜΑ-ΒΗΜΑ: ΛΥΣΗ 2 1 10000010 11110110000000000000000 Σε δεκαδική µορφή 130-127 = 3 1.11110110000000000000000000 Shift Point ( αρνητικός ) 1111.10110000000000000000000-15.6875
Άσκηση 2 Εκφράστε το 3.14 σαν 32-bit πραγµατικό κινητής υποδιαστολής Answer: (Σηµ : χρησιµοποιείστε µόνο 10 σηµαντικά ψηφία για την mantissa)
Άσκηση 2 Εκφράστε το 3.14 σαν 32-bit πραγµατικό κινητής υποδιαστολής Answer: Απάντηση 0 10000000 10010001111000000000000 (Σηµ : χρησιµοποιείστε µόνο 10 σηµαντικά ψηφία για την mantissa)
ΒΗΜΑ-ΒΗΜΑ: 3.14 σε IEEE απλής ακρίβειας 3.14 µετατροπή στο (2) (προσεγγιση): 11.001000111101 Κανονικοποίηση προσοχή 1001000111101 Εκθέτης (Exponent) = 127 + 1 10000000 Τιµή θετική: Πρόσηµο (Sign bit) = 0 0 10000000 10010001111010000000000
παράδειγµα Να γίνει παράσταση του επόμενου κανονικοποιημένου αριθμού σε απλή ακρίβεια : + 2 6 x 1.01000111001 Λύση Το πρόσημο είναι θετικό. Το συμπλήρωμα (πόλωση) ως προς 127 του εκθέτη είναι 133. (127=01111111, 6=110, 133=10000101) Προσθέτεις επιπλέον 0s στα δεξιά για να γίνει 23 bits. Ο αριθμός καταχωρείται σαν πρόσημο εκθέτης σημαινόμενο τμήμα 0 10000101 01000111001000000000000
παράδειγµα Να βρεθεί ο 32-bit floating-point σε κανονική μορφή: 1 01111100 11001100000000000000000 Λύση Το πρόσημο είναι αρνητικό. Ο εκθέτης είναι 3 (124 127). Ο αριθμός μετά την κανονικοποίησή του είναι: -2-3 x 1.110011
Πρόσθεση/αφαίρεση Floating point Ελέγχονται τα πρόσηµα. Αν τα πρόσηµα είναι τα ίδια, προστίθενται οι αριθµοί και αντιστοιχίζεται το πρόσηµο στο αποτέλεσµα. Αν τα πρόσηµα είναι διαφορετικά, συγκρίνονται οι απόλυτες τιµές, αφαιρείται η µικρότερη από τη µεγαλύτερη, και χρησιµοποιείται το πρόσηµο της µεγαλύτερης στο αποτέλεσµα. Μετακινούνται οι υποδιαστολές ώστε να εξισωθούν οι εκθέτες. Αυτό σηµαίνει ότι αν οι εκθέτες δεν είναι ίδιοι, µετατίθεται προς τα αριστερά η υποδιαστολή του αριθµού µε τον µικρότερο εκθέτη ώστε οι εκθέτες να εξισωθούν. Προστίθενται ή αφαιρούνται τα δεκαδικά µέρη σηµαινόµενα τµήµατα (τόσο συµπεριλαµβάνοντας το ακέραιο µέρος όσο και το κλασµατικό µέρος). Κανονικοποιείται το αποτέλεσµα, πριν από την αποθήκευσή του στη µνήµη. Γίνεται έλεγχος για υπερχείλιση.
Πρόσθεση/αφαίρεση Floating point Προσθέστε δύο αριθµούς κινητής υποδιαστολής 0 10000100 10110000000000000000000 0 10000010 01100000000000000000000 Λύση Ο εκθέτης του πρώτου αριθµού είναι 132 127, δηλαδή 5. Ο εκθέτης του δεύτερου αριθµού είναι 130 127, δηλαδή 3. Άρα οι αριθµοί έχουν ως εξής: +2 5 1,1011 +2 3 1,011
Πρόσθεση/αφαίρεση Floating point Εξισώνουµε τους εκθέτες: +2 5 1,1011 +2 5 1,01011 +2 5 10,00001 Τώρα κανονικοποιούµε το αποτέλεσµα: +2 6 1,000001 O αριθµός αποθηκεύεται στον υπολογιστή µε την εξής µορφή: 0 10000101 0000010000000000000000000
Άθροισμα πραγματικών κινητής υποδιαστολής ΠΑΡΑΔΕΙΓΜΑ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΣΦΑΛΜΑΤΟΣ Στην παράσταση κινητής υπ/λής με 8 ψηφία για το συντελεστή και 4 ψηφία για τον εκθέτη, ο αριθμός x = 16,125(10) παριστάνεται ως 0,10000001 2 5 άρα x= 0010110000001 ο αριθμός y = 4,3125(10) παριστάνεται ως 0,1000101 2 3 άρα y= 0001110001010 Πρώτα μετατρέπουμε τον αριθμό με το μικρότερο εκθέτη, που είναι ο y. Αυξάνουμε τον εκθέτη του κατά 2 και ολισθαίνουμε το συντελεστή του προς τα αριστερά κατά 2 ψηφία : y= 0010100100010 Στη συνέχεια προσθέτουμε τους δύο αριθμούς, και έχω x+y= 0010110100011 Το άθροισμα δε χρειάζεται κανονικοποίηση, άρα είναι και το τελικό αποτέλεσμα. Η τιμή του είναι 0,10100011 2 5, δηλαδή 20,375. Το σωστό αποτέλεσμα της πρόσθεσης όμως είναι 20,4375. Το σφάλμα οφείλεται στη μετατροπή του y ώστε να έχει τον ίδιο εκθέτη με το x.