Chapter 3 Αριθμητική Υπολογιστών (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση: Καθ. Εφαρμογών Νικόλαος Πετράκης, Τμήματος Ηλεκτρονικών Μηχανικών του Τ.Ε.Ι. Κρήτης. Τελευταία τροποποίηση: 2014-2015 χειμερινό εξάμηνο.
Διαίρεση (Division) διαιρέτης (divisor) πηλίκο (quotient) διαιρετέος (dividend) υπόλοιπο (remainder) 1001 1000 1001010-1000 10 101 1010-1000 10 Τελεστέοι με n δυαδικά ψηφία παράγουν πηλίκο και υπόλοιπο με n δυαδικά ψηφία Έλεγχος για διαιρέτη μηδέν (0) Η απλή τεχνική της διαίρεσης Εάν ο διαιρέτης διαιρετέο Τοποθετείται 1 στο πηλίκο, αφαίρεση Διαφορετικά 0 στο πηλίκο, και κατεβάζουμε το επόμενο δυαδικό ψηφίο του διαιρετέου Διαίρεση με επαναφορά ή αποκατάσταση (Restoring division) Εκτελείται η αφαίρεση, και αν το υπόλοιπο γίνει < 0, προστίθεται πίσω ο διαιρέτης Προσημασμένη διαίρεση (Signed division) Διαίρεση κατά απόλυτες τιμές Ρύθμιση πρόσημων πηλίκου και υπολοίπου κατά απαίτηση Chapter 3 Arithmetic for Computers 2
Υλικό διαίρεσης Αρχικά ο διαιρέτης στο αριστερό μισό Το πηλίκο με αρχική τιμή 0 32 bits 0000 00 000 00 32 bits Αρχικά ο διαιρετέος στο δεξιό μισό Chapter 3 Arithmetic for Computers 3
Βελτιωμένο κύκλωμα διαίρεσης διαιρέτης Αρχικά ο διαιρετέος στο αριστερό μισό Διαίρεση (Πολλαπλασιασμός ) διαιρετέος 000 00 υπόλοιπο πηλίκο Στο τέλος έχουμε το υπόλοιπο αριστερά και το πηλίκο δεξιά Ένας κύκλος ανά αφαίρεση μερικού υπολοίπου Μοιάζει πολύ με κύκλωμα πολλαπλασιασμού Το ίδιο υλικό μπορεί να χρησιμοποιηθεί και για τις δύο πράξεις Chapter 3 Arithmetic for Computers 4
Ταχύτερη διαίρεση Δεν μπορούμε να χρησιμοποιήσουμε παράλληλο υλικό όπως στον πολλαπλασιασμό Η αφαίρεση εξαρτάται από το πρόσημο του μερικού υπολοίπου Ταχύτεροι διαιρέτες, όπως η τεχνική της διαίρεσης SRT (Sweeney-Robertson-Tocher) παράγουν περισσότερα δυαδικά ψηφία πηλίκου ανά βήμα (τυπική τιμή 4 bit) Εξακολουθούν να απαιτούν πολλά βήματα Chapter 3 Arithmetic for Computers 5
Η διαίρεση στον MIPS Χρησιμοποιεί τους καταχωρητές Hi/Lo για τα αποτελέσματα της πράξης Hi: το υπόλοιπο (remainder) σε 32 bits Lo: το πηλίκο (quotient) σε 32 bits Εντολές div rs, rt / divu rs, rt Δεν γίνεται έλεγχος υπερχείλισης (overflow) ή διαίρεσης διά του μηδενός (divide-by-0) Το λογισμικό πρέπει να ελέγχει, αν απαιτείται Χρησιμοποιείστε mfhi, mflo για πρόσβαση στα αποτελέσματα Chapter 3 Arithmetic for Computers 6
Κινητή υποδιαστολή (Floating Point) Αναπαράσταση πραγματικών (μη ακέραιων) αριθμών Συμπεριλαμβάνοντας πολύ μικρούς και πολύ μεγάλους αριθμούς Όπως η επιστημονική σημειογραφία 2.34 10 56 +0.002 10 4 +987.02 10 9 Στο δυαδικό κανονικοποιημένος (normalized) -μόνο ένα ψηφίο αριστερά της υποδιαστολής και όχι μηδέν μη κανονικοποιημένοι (not normalized) ±1.xxxxxxx 2 2 yyyy Οι τύποι δεδομένων float και double στην C Chapter 3 Arithmetic for Computers 7
Το πρότυπο κινητής υποδιαστολής Ορίστηκε από την IEEE ως Std 754-1985 Αναπτύχθηκε για να αντιμετωπίσει την απόκλιση μεταξύ των απεικονίσεων Προβλήματα φορητότητας σε επιστημονικά προγράμματα (scientific code) Έχει υιοθετηθεί παγκοσμίως Δύο απεικονίσεις (αναπαραστάσεις) Απλής ακρίβειας στα 32 bit (Single precision) Διπλής ακρίβειας στα 64 bit (Double precision) Chapter 3 Arithmetic for Computers 8
IEEE Floating-Point Format single: 8 bits single: 23 bits double: 11 bits double: 52 bits S Εκθέτης (Exponent) Κλάσμα (Fraction) 1 bit x ( 1) S (1 Fraction) 2 (Exponent Bias) S: πρόσημο (sign) (0 μη αρνητικό, 1 αρνητικό) Κανονικοποίηση σημαντικού (significand): 1.0 significand < 2.0 Στους κανονικοποιημένους αριθμούς υπάρχει πάντα ένα δυαδικό ψηφίο αριστερά της υποδιαστολής με τιμή 1, άρα δεν χρειάζεται να το δείξουμε ρητά, υπονοείται (γι αυτό το λέμε implicit ή hidden bit) Το σημαντικό (Significand) είναι το κλάσμα (Fraction) μαζί με το 1. Ο εκθέτης απεικονίζεται σε πολωμένη σημειογραφία (biased notation), δηλ: ο πραγματικός εκθέτης προσαυξημένος με την πόλωση (Bias) Εξασφαλίζει ότι ο εκθέτης θα είναι απρόσημος Στην απλή ακρίβεια: Bias = 127, ενώ στην διπλή: Bias = 1023 Chapter 3 Arithmetic for Computers 9
Εύρος απλής ακρίβειας Οι εκθέτες 00000000 και 11111111 είναι δεσμευμένοι (reserved) Η μικρότερη τιμή Εκθέτης : 00000001 πραγματικός εκθέτης = 1 127 = 126 Κλάσμα : 000 00 σημαντικό = 1.0 ±1.0 2 126 ±1.2 10 38 Η μεγαλύτερη τιμή Εκθέτης : 11111110 πραγματικός εκθέτης = 254 127 = +127 Κλάσμα : 111 11 σημαντικό 2.0 ±2.0 2 +127 ±3.4 10 +38 Chapter 3 Arithmetic for Computers 10
Εύρος διπλής ακρίβειας Οι εκθέτες 0000 00 και 1111 11 δεσμευμένοι Η μικρότερη τιμή Εκθέτης : 00000000001 πραγματικός εκθέτης = 1 1023 = 1022 Κλάσμα : 000 00 σημαντικό = 1.0 ±1.0 2 1022 ±2.2 10 308 Η μεγαλύτερη τιμή Εκθέτης : 11111111110 πραγματικός εκθέτης = 2046 1023 = +1023 Κλάσμα : 111 11 significand 2.0 ±2.0 2 +1023 ±1.8 10 +308 Chapter 3 Arithmetic for Computers 11
Ακρίβεια κινητής υποδιαστολής Σχετική ακρίβεια (Relative precision) Όλα τα δυαδικά ψηφία του κλάσματος είναι σημαντικά Απλή ακρίβεια : περίπου 2 23 (με το κρυμμένο 2 24 ) Ισοδύναμο με το 23 log 10 2 23 0.3 6 με 7 δεκαδικά ψηφία ακρίβεια Διπλή ακρίβεια : περίπου 2 52 (με το κρυμμένο 2 53 ) Ισοδύναμο με το 52 log 10 2 52 0.3 15 με 16 δεκαδικά ψηφία ακρίβεια Chapter 3 Arithmetic for Computers 12
Παράδειγμα κινητής υποδιαστολής Αναπαράσταση του 0,75 0,75 = ( 1) 1 1,1 2 2 1 Πρόσημο (S) = 1 Κλάσμα (Fraction) = 1000 00 2 Εκθέτης (Exponent) = 1 + πόλωση (Bias) Single : 1 + 127 = 126 = 01111110 2 Double : 1 + 1023 = 1022 = 01111111110 2 Single :1011111101000 00 Double :1011111111101000 00 Chapter 3 Arithmetic for Computers 13
Παράδειγμα κινητής υποδιαστολής Ποιος αριθμός είναι απεικονισμένος σε κινητή υποδιαστολή απλή ακρίβεια 11000000101000 00 Πρόσημο (S) = 1 Κλάσμα (Fraction) = 01000 00 2 Εκθέτης (Exponent) = 10000001 2 = 129 x = ( 1) 1 (1 + 0,01 2 ) 2 (129 127) = ( 1) 1,25 2 2 = 5,0 Chapter 3 Arithmetic for Computers 14
Μη κανονικοποιημένοι (denormal) αριθμοί Εκθέτης = 000...0 το υπονοούμενο (implicit) bit είναι 0 x ( 1) S (0 Fraction) 2 Bias Μικρότερος από τους κανονικούς (normal) αριθμούς Επιτρέπει σταδιακή (gradual) ανεπάρκεια (underflow), με μειωμένη ακρίβεια Όταν το κλάσμα είναι = 000...0 τότε x ( 1) S (0 0) 2 Bias 0.0 Δύο απεικονίσεις του 0.0! Chapter 3 Arithmetic for Computers 15
Άπειρο και όχι-αριθμός (NaN) Εκθέτης = 111...1, κλάσμα = 000...0 ± Άπειρο Μπορεί να χρησιμοποιηθεί στους επακόλουθους υπολογισμούς, αποφεύγοντας την ανάγκη για έλεγχο υπερχείλισης Εκθέτης = 111...1, Κλάσμα 000...0 Όχι αριθμός {Not-a-Number (NaN)} Δείχνει εσφαλμένο ή αόριστο αποτέλεσμα π.χ., 0,0 / 0,0 Μπορεί να χρησιμοποιηθεί στους επακόλουθους υπολογισμούς Chapter 3 Arithmetic for Computers 16
Κωδικοποίηση IEEE-754 αριθμών Κ.Υ. Απλή Ακρίβεια Διπλή Ακρίβεια Εκθέτης Κλάσμα Εκθέτης Κλάσμα Αναπαριστώμενο αντικείμενο 0 0 0 0 μηδέν (0) 0 μη μηδενικό 0 μη μηδενικό 1 254 οτιδήποτε 1 2046 οτιδήποτε +/- μη κανονικοποιημένος αριθμός +/- αριθμός κινητής υποδιαστολής 255 0 2047 0 +/- άπειρο 255 μη μηδενικό 2047 μη μηδενικό NaN (Not a Number = όχι αριθμός) Chapter 3 Arithmetic for Computers 17
Πρόσθεση σε κινητή υποδιαστολή Θεωρείστε ένα παράδειγμα στο δεκαδικό τετραψήφιο 9,999 10 1 + 1,610 10 1 1. Στοίχιση (ευθυγράμμιση) των υποδιαστολών Ολισθαίνοντας τον αριθμό με τον μικρότερο εκθέτη 9,999 10 1 + 0,016 10 1 2. Πρόσθεση σημαντικών 9,999 10 1 + 0,016 10 1 = 10,015 10 1 3. Κανονικοποίηση αποτελέσματος και έλεγχος για υπερχείλιση (overflow) ή ανεπάρκεια (underflow) 1,0015 10 2 4. Στρογγυλοποίηση και αν χρειαστεί κανονικοποίηση εκ νέου 1,002 10 2 Chapter 3 Arithmetic for Computers 18
Πρόσθεση σε κινητή υποδιαστολή(κ.υ.) Τώρα θεωρείστε ένα τετραψήφιο δυαδικό παράδειγμα 1,000 2 2 1 + ( 1,110 2 2 2 ) // (0,5 + ( 0,4375)) 1. Στοίχιση υποδιαστολών Ολίσθηση του αριθμού με τον μικρότερο εκθέτη 1,000 2 2 1 + ( 0,111 2 2 1 ) 2. Πρόσθεση σημαντικών 1,000 2 2 1 + ( 0,111 2 2 1 ) = 0,001 2 2 1 3. Κανονικοποίηση αποτελέσματος και έλεγχος για υπερχείλιση ή ανεπάρκεια 1,000 2 2 4, δεν εμφανίστηκε over/underflow 4. Στρογγυλοποίηση και κανονικοποίηση εκ νέου εάν απαιτείται 1,000 2 2 4 (χωρίς αλλαγή) // 0,0625 Chapter 3 Arithmetic for Computers 19
Υλικό πρόσθεσης Κ.Υ. Πολύ πιο πολύπλοκο σε σύγκριση με τον αθροιστή ακεραίων Εκτελώντας την λειτουργία σε ένα κύκλο θα διαρκούσε πάρα πολύ Πολύ περισσότερο από όσο διαρκούν οι πράξεις με ακεραίους Βραδύτερο ρολόι θα επιβάρυνε όλες τις εντολές Ο αθροιστής Κ.Υ. συνήθως χρειάζεται κάμποσους κύκλους ρολογιού Μπορεί να υλοποιηθεί με διοχέτευση (pipeline) Chapter 3 Arithmetic for Computers 20
Διάγραμμα Πρόσθεσης Κ.Υ. Έναρξη 1. Σύγκριση εκθετών των δύο αριθμών. Ολίσθηση του μικρότερου αριθμού προς τα δεξιά μέχρι ο εκθέτης του να ταιριάζει με τον μεγάλο εκθέτη 2. Πρόσθεση των σημαντικών 3. Κανονικοποίηση του αθροίσματος, είτε με δεξιά ολίσθηση και αύξηση του εκθέτη, είτε με αριστερή ολίσθηση και μείωση του εκθέτη Υπερχείλιση ή ανεπάρκεια; Ναι Όχι 4. Στρογγυλοποίηση του σημαντικού στον κατάλληλο αριθμό bit Εξαίρεση Όχι Παραμένει κανονικοποιημένος; Ναι Τέλος Chapter 3 Arithmetic for Computers 21
Υλικό αθροιστή Κ.Υ. Βήμα 1 Βήμα 2 Βήμα 3 Βήμα 4 Chapter 3 Arithmetic for Computers 22