Αρχική Σελίδα | Ομάδα Ανάπτυξης | Επικοινωνία

  




Κεντρική Σελίδα

Τεχνικά Αρθρα
   Κατά Κατηγορία
   Κατά Ημερομηνία

Πληροφορίες
Υποβολή Aρθρου
Επικοινωνία
Όροι Χρήσης
   

Αριθμοί/Αριθμητική Κινητής Υποδιαστολής


Tεχνικά Aρθρα / Ψηφιακή Αριθμητική /

Θεματική Ενότητα :     Ψηφιακή Αριθμητική
Τίτλος Αρθρου :     Αριθμοί/Αριθμητική Κινητής Υποδιαστολής
Ημερομηνία Δημοσίευσης :     Σάββατο, 5 Νοεμβρίου 2005
Συγγραφέας :     Μπροκαλάκης Ανδρέας, Καλογεράκης Παναγιώτης
Επικοινωνία :     mprokala@ceid.upatras.gr
Σχετιζόμενα Aρθρα :     -


Περίληψη

Το παρόν άρθρο περιγράφει την αναπαράσταση αριθμών κινητής υποδιαστολής (floating point). Οι αριθμοί αυτοί ακολουθούν το πρότυπο IEEE 754 και χρησιμοποιούνται σε όλους τους σύγχρονους επεξεργαστές για την αναπαράσταση ρητών αριθμών.

Εκτός από την κωδικοποίηση, μια ψηφιακή αριθμητική αναπαράσταση καθορίζει σε βασικές γραμμές και τους αλγορίθμους για την υλοποίηση βασικών πράξεων μεταξύ των αναπαριστώμενων αριθμών. Έτσι, το άρθρο αυτό θα παρουσιάσει και τους βασικούς αλγορίθμους πρόσθεσης και πολλαπλασιασμού αριθμών κινητής υποδιαστολής.

Προαπαιτούμενα

Για την κατανόηση του άρθρου, ο αναγνώστης θα πρέπει να διαθέτει βασικές γνώσεις γύρω από την θεωρία των υπολογιστών. Γνώσεις αρχιτεκτονικής υπολογιστών και ψηφιακής αριθμητικής είναι θεμιτές αλλά όχι απαραίτητες.


Αριθμοί Κινητής Υποδιαστολής - Το Πρότυπο ΙΕΕΕ 754

Σύμφωνα με το πρότυπο ΙΕΕΕ-754 για την αναπαράσταση ενός αριθμού απαιτείται μια τριάδα αριθμών {s,e,m}. O πρώτος αριθμός (s - sign) κωδικοποιεί την πληροφορία προσήμου. Έχει εύρος 1 bit και η τιμή 0 αντιστοιχεί στο θετικό πρόσημο ενώ η τιμή 1 στο αρνητικό. Ο αριθμός e (e - exponent) χρησιμοποιείται για την αναπαράσταση του εκθέτη και τέλος ο αριθμός m (m - magnitude) κωδικοποιεί την πληροφορία των σημαντικών ψηφίων του αναπαριστώμενου αριθμού. Οι τρεις αυτοί αριθμοί κωδικοποιούνται σε μια λέξη και ο καθένας από αυτούς καταλαμβάνει ένα μέρος της. Πρώτα τοποθετείται το πρόσημο, στην συνέχεια ο εκθέτης και τέλος o συντελεστής.

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

  • Αναπαράσταση Απλής Ακρίβειας (Single Precision) : Χρησιμοποιούνται 8 bits για την αναπαράσταση του εκθέτη και 23 bits για τον συντελεστή, οπότε συνολικά ο αριθμός αποθηκεύεται σε 32bit (8+23+1bit για το πρόσημο).
  • Αναπαράσταση Διπλής Ακρίβειας (Double Precision) : Ο εκθέτης αναπαρίσταται με 11 bits, ο συντελεστής με 52 bits, οπότε συνολικά απαιτούνται 64bit για την αποθήκευση του αριθμού.

Εκτός από τις δύο βασικές κλάσεις, καθορίζονται και δύο κλάσεις εκτεταμένης ακρίβειας (απλή εκτεταμένη και διπλή εκτεταμένη ακρίβεια). Σε αντίθεση με τις βασικές κλάσεις, το πρότυπο δεν καθορίζει αυστηρά το εύρος των πεδίων e και m για τις εκτεταμένες. Οι μόνοι περιορισμοί που τίθενται αφορούν στο ελάχιστο εύρος του πεδίου συντελεστή και στο συνολικό πλήθος bit που απαιτούνται για την αναπαράσταση. Για παράδειγμα, ένας αριθμός διπλής εκτεταμένης ακρίβειας θα πρέπει να έχει συντελεστή με τουλάχιστον 63 bits και συνολικά τα τρία πεδία s, e και m θα πρέπει να καταλαμβάνουν τουλάχιστον 79 bits.

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


Σχήμα 1.

Ήδη αναφέρθηκε ο τρόπος κωδικοποίησης του προσήμου. Τα άλλα δύο πεδία της αναπαράστασης δεν κωδικοποιούνται με τόσο απλό τρόπο. Ο εκθέτης, που στην αναπαράσταση ακολουθεί αμέσως μετά το bit του προσήμου, είναι ένας προσημασμένος αριθμός που αναπαριστάται με την μέθοδο της πόλωσης. Σύμφωνα με τη μέθοδο αυτή, στην τιμή του εκθέτη του αριθμού, προστίθεται πρώτα μία σταθερά πόλωσης. Η τιμή του πεδίου e αποτελεί τη δυαδική αναπαράσταση του αποτελέσματος της πρόσθεσης αυτής. Ως σταθερά πόλωσης θεωρείται η τιμή 127 για την αναπαράσταση απλής ακρίβειας και η τιμή 1023 για την αναπαράσταση διπλής ακρίβειας.

Για να διευκρινιστεί η μέθοδος, μπορεί να δοθεί ένα πολύ απλό παράδειγμα. Έστω ότι ο εκθέτης ενός αριθμού είναι 1. Τότε, αν η σταθερά πόλωσης είναι 127, ο πολωμένος εκθέτης θα είναι 127 + 1 = 128.

Ως βάση του εκθέτη θεωρείται από το πρότυπο ο αριθμός 2. Η πληροφορία αυτή θεωρείται δεδομένη (είναι δηλαδή κοινή για όλους τους αριθμούς κινητής υποδιαστολής) και δεν χρειάζεται να αποθηκευτεί.

Το τελευταίο πεδίο της αναπαράστασης (εύρους 23 bit για απλή και 52 bit για διπλή ακρίβεια), χρησιμοποιείται, όπως αναφέρθηκε, για την αποθήκευση του συντελεστή που προσδιορίζει τα σημαντικά ψηφία του αριθμού. Ο συντελεστής θεωρείται ότι είναι ένας ρητός αριθμός. Η υποδιαστολή θεωρείται ότι είναι τοποθετημένη αριστερά του σημαντικότερου ψηφίου του συντελεστή και ότι αριστερά της βρίσκεται πάντα ο αριθμός 1. Οι αριθμοί που ικανοποιούν αυτήν την ιδιότητα ονομάζονται κανονικοποιημένοι. Επειδή πάντα υπάρχει η θεώρηση ότι αριστερά της υποδιαστολής βρίσκεται ο αριθμός 1, δεν υπάρχει λόγος αυτός ο αριθμός να συμπεριλαμβάνεται στην αναπαράσταση (υπονοείται) και για τούτο ονομάζεται hidden ή ghost bit. Το γεγονός βέβαια αυτό έχει ως αποτέλεσμα, αν και ο συντελεστής περιλαμβάνει 23 bits ουσιαστικά η ακρίβεια να είναι 24 bits (52 και 53 bits αντίστοιχα για αναπαράσταση διπλής ακρίβειας).

Με βάση τα παραπάνω, αν s το πρόσημο, e ο πολωμένος εκθέτης (οπότε 0 < e < 255) και f η ακρίβεια ενός αριθμού n σε αναπαράσταση κινητής υποδιαστολής απλής ακρίβειας, τότε ο αριθμός αυτός μπορεί να υπολογιστεί από τον τύπο :

n = (-1)s x 2e-127 x 1.f

Προσέξτε ότι ο παραπάνω τύπος δεν ισχύει για τις ακραίες τιμές 0 και 255 που μπορεί να πάρει ο εκθέτης. Ο λόγος που συμβαίνει αυτό, είναι ότι οι τιμές αυτές χρησιμοποιούνται για την αναπαράσταση ειδικών αριθμών. Το πρότυπο ΙΕΕΕ-754 ορίζει δύο τέτοιες κατηγορίες ειδικών αριθμών, τους μη κανονικοποιήμενους (denormal ή subnormal numbers) και τις αναπαραστάσεις ειδικών περιπτώσεων.

Πιο συγκεκριμένα, οι μη κανονικοποιημένοι αριθμοί αναπαρίστανται έχοντας μηδενική τιμή στο πεδίο του εκθέτη. Η διαφοροποίηση της κατηγορίας αυτής έγκειται στο ότι το δυαδικό ψηφίο που βρίσκεται αριστερά της υποδιαστολής θεωρείται ότι είναι το 0 και όχι το 1. Επιπλέον, η τιμή του εκθέτη δεν είναι -127, όπως θα προέκυπτε αφαιρώντας τη σταθερά πόλωσης από το πεδίο e, αλλά -126. Έτσι, η τιμή nd που αναπαριστά ένας αριθμός που έχει e = 0 , είναι :

nd = (-1)s (0.m) x 2-126

Σύμφωνα με τον τύπο αυτό, η αναπαράσταση του αριθμού μηδέν μπορεί να επιτευχθεί θεωρώντας τον ως μη κανονικοποιημένο αριθμό με συντελεστή μηδέν.

Όταν το πεδίο του εκθέτη έχει την μέγιστη τιμή (e = 255), τότε αναπαρίσταται η πληροφορία κάποιας ειδικής περίπτωσης. Η αναπαράσταση δεν αντιστοιχίζεται σε κάποια πεπερασμένη τιμή. Αν το πεδίο συντελεστή είναι μηδενικό τότε η αναπαράσταση αντιστοιχίζεται στο άπειρο (+INF) ή στο πλην άπειρο (-INF) , ανάλογα με την τιμή του προσήμου. Αν το πεδίο συντελεστή είναι μη μηδενικό, τότε θεωρείται ότι η αναπαράσταση είναι μη-αριθμός (NaN, Not a Number). Ανάλογα με την τιμή του πιο σημαντικού ψηφίου του συντελεστή, οι μη-αριθμοί χωρίζονται σε δύο κατηγορίες. Αν το ψηφίο αυτό είναι 1, τότε ο μη-αριθμός χαρακτηρίζεται ως Quiet NaN (QNaN). Μια τιμή QNaN προκύπτει από μία πράξη η οποία δεν είναι μαθηματικά ορισμένη (π.χ. INF-INF). Αν το πιο σημαντικό ψηφίο του συντελεστή είναι μηδενικό, τότε ο μη-αριθμός χαρακτηρίζεται ως Signaling NaN (SNaN). Οι τιμές SNaN χρησιμοποιούνται για τη σηματοδότηση εξαιρετικών καταστάσεων.

Στον πίνακα που ακολουθεί, παρουσιάζονται συνοπτικά όλες οι δυνατές ερμηνείες που μπορεί να έχει ένας αριθμός κινητής υποδιαστολής απλής ακρίβειας.

Εκθέτης Συντελεστής Αναπαράσταση
e = 0 f = 0 +/- 0 (προσημασμένο 0)
e = 0 f != 0 (-1)s x 2-126 x 0.f (μη κανονικοποιημένοι αριθμοί)
0 < e < 255 - (-1)s x 2e-127 x 1.f (κανονικοποιημένοι αριθμοί)
e = 255 f = 0 +/- INF (άπειρο)
e = 255 f != 0 NaN (μη αριθμός)

Έχοντας ολοκληρώσει την παρουσίαση του προτύπου ΙΕΕΕ 754, αυτό που απομένει, είναι να δειχθούν οι αλγόριθμοι για την πρόσθεση (αφαίρεση) και τον πολλαπλασιασμό κινητής υποδιαστολής. Από άποψη πολυπλοκότητας, απλούστερος είναι ο αλγόριθμος πολλαπλασιασμού κινητής υποδιαστολής, για τούτο και θα παρουσιαστεί πρώτος. Στην συνέχεια, θα αναλυθεί ο αλγόριθμος πρόσθεσης κινητής υποδιαστολής. Να σημειωθεί ότι κατά την παρουσίαση των αλγορίθμων αυτών, η προσοχή θα εστιαστεί σε αριθμούς κινητής υποδιαστολής απλής ακρίβειας. Για αριθμούς διπλής ακρίβειας, αρκεί να αναπροσαρμοστούν οι διάφορες ποσότητες στα κατάλληλα μεγέθη, καθώς οι αλγόριθμοι δεν έχουν καμία άλλη διαφορά.


Πολλαπλασιασμός Κινητής Υποδιαστολής

Όπως αναφέρθηκε ήδη, ο πολλαπλασιασμός αποτελεί την πιο απλή πράξη κινητής υποδιαστολής, από άποψη πολυπλοκότητας. Αποτελείται από τρεις βασικές φάσεις : τον πολλαπλασιασμό των συντελεστών, την στρογγυλοποίηση του αποτελέσματος και τον υπολογισμό του νέου εκθέτη.

Αρχικά, οι συντελεστές των δύο αριθμών που πολλαπλασιάζονται πρέπει να «ξεδιπλωθούν» (unpack), δηλαδή το hidden bit που υπονοείται πρέπει να προσαρτηθεί σε αυτούς. Έτσι, θα προκύψουν δύο συντελεστές εύρους 24 bit, που πρέπει να πολλαπλασιαστούν μεταξύ τους. Η πράξη αυτή είναι ακριβώς όμοια με τον ακέραιο πολλαπλασιασμό ανάλογων ποσοτήτων (μιας και οι συντελεστές αποθηκεύονται σε sign-magnitude μορφή).

Το αποτέλεσμα που θα προκύψει από τον πολλαπλασιασμό των συντελεστών μπορεί να έχει εύρος μέχρι 48 bits (2 x 24 bits). Για τούτο και θα πρέπει να στρογγυλοποιηθεί ώστε να μπορεί να αποθηκευθεί σε 24 bits. Θεωρώντας το αποτέλεσμα ως 48 bit ποσότητα, έστω ότι το 25ο πιο σημαντικό bit είναι το guard bit (εν συντομία g), το 26ο πιο σημαντικό bit είναι το round bit (r) και το λογικό-Ή (OR) όλων των υπολοίπων bit, είναι το sticky bit (s). Ο νέος συντελεστής θα είναι τα 24 πιο σημαντικά bit του γινομένου των 48 bits που έχει προκύψει. Υπάρχουν δύο περιπτώσεις:

  1. το πιο σημαντικό bit του αποτελέσματος είναι 0. Τότε πρέπει να εφαρμοστεί αριστερή ολίσθηση κατά μία θέση στον νέο συντελεστή και να εισαχθεί το guard bit.
  2. το πιο σημαντικό bit του αποτελέσματος είναι 1. Τότε το round bit παίρνει την τιμή του guard bit (r:= g) και το sticky bit γίνεται το λογικό-Ή της προηγούμενης τιμής των sticky και round bits (s:= s OR r). Επίσης, η τιμή του εκθέτη θα πρέπει να αυξηθεί κατά 1.

Αν η τιμή του round bit είναι 0, τότε ο υπολογισμός του συντελεστή έχει ολοκληρωθεί. Στην περίπτωση όμως που το round bit είναι 1, τότε θα πρέπει να εφαρμοστεί στρογγυλοποίηση. Το πρότυπο της IEEE ορίζει τέσσερις διαφορετικούς τρόπους στρογγυλοποίησης, που συνοψίζονται στον ακόλουθο πίνακα. Να σημειωθεί ότι, από τους τέσσερις αυτούς τρόπους στρογγυλοποίησης, μια συγκεκριμένη υλοποίηση του προτύπου αρκεί να επιλέξει έναν. Η επιλογή στηρίζεται σε κριτήρια όπως το κόστος υλοποίησης και η ζητούμενη ακρίβεια.

Τρόπος Στρογγυλοποίησης Θετικό Πρόσημο Αποτελέσματος Αρνητικό Πρόσημο Αποτελέσματος
-INF - +1 εάν r OR s
+INF +1 εάν r OR s -
0 - -
Nearest +1 εάν (r AND p0) ή (r AND s) +1 εάν (r AND p0) ή (r AND s)

* ως p0 σημειώνεται το λιγότερο σημαντικό bit του νέου συντελεστή και ως r,s τα round και sticky bits αντίστοιχα

Όπως και κατά τον πολλαπλασιασμό κοινών αριθμών οι εκθέτες τους προστίθενται, έτσι γίνεται και στον πολλαπλασιασμό κινητής υποδιαστολής. Όμως υπάρχει μια σημαντική διαφορά που πηγάζει από το γεγονός ότι οι εκθέτες είναι πολωμένοι. Κατά συνέπεια, αν προστεθούν, τότε το αποτέλεσμα θα περιλαμβάνει δύο φορές την σταθερά πόλωσης. Για τούτο και απαιτείται μετά την πρόσθεση να αφαιρεθεί η σταθερά πόλωσης. (Παρατήρηση : δεν πρέπει να λησμονηθεί ότι η τιμή του τελικού εκθέτη ενδέχεται να αυξηθεί κατά την διάρκεια της στρογγυλοποίησης, όπως αναφέρθηκε ήδη κατά την παρουσίαση της μεθόδου στρογγυλοποίησης).

Αν και τα παραπάνω δίνουν μια πλήρη εικόνα του αλγορίθμου του πολλαπλασιασμού κινητής υποδιαστολής, υπάρχουν κάποια θέματα που δεν έχουν θιχτεί. Το πρώτο σχετίζεται με τον τρόπο που ανιχνεύεται και χειρίζεται ένα overflow. Αν e1 και e2 είναι οι δύο εκθέτες των αριθμών που πολλαπλασιάζονται, τότε 1 <= ei <= 254 και ο τελικός εκθέτης θα είναι μεταξύ των τιμών :

1 + 1 -127 <= e <= 254 + 254 -127 -> -125 <= e <= 381

Οι αριθμοί αυτοί για να αναπαρασταθούν χρειάζονται 9 bits. Κατά συνέπεια πρέπει να χρησιμοποιηθεί ένας 9-bit adder για να υπολογιστεί ο νέος εκθέτης. Αν ο τελικός εκθέτης (σημειωτέον μετά την στρογγυλοποίηση) είναι μεγαλύτερος του 128, τότε έχει προκύψει overflow.

Ένα δεύτερο θέμα αφορά τον έλεγχο για underflow και τον χειρισμό μη-κανονικοποιημένων αριθμών. Αν το αποτέλεσμα έχει ως εκθέτη έναν αριθμό μικρότερο του -126, αυτό δεν σημαίνει απαραίτητα ότι έχει προκύψει underflow καθώς το αποτέλεσμα μπορεί να είναι ένας μη-κανονικοποιημένος (denormal) αριθμός. Για παράδειγμα, το γινόμενο των αριθμών (1x2-64) και (1x2-65) είναι (1x2-129). Το -129 είναι μικρότερο από το κατώτερο επιτρεπτό όριο για τον εκθέτη. Όμως ο αριθμός είναι ένας καθόλα νόμιμος denormal αριθμός, ο 0.125x2-126. Έτσι γενικά, όταν ο μη-πολωμένος εκθέτης του γινομένου είναι μικρότερος του -126, το γινόμενο θα πρέπει να ολισθήσει δεξιά και αντίστοιχα η τιμή του εκθέτη να αυξάνεται μέχρι αυτός να γίνει ίσος με -126. Αν κατά την διαδικασία αυτή, όλος ο συντελεστής ολισθήσει, τότε θα έχει προκύψει underflow.

Από την άλλη, όταν ένας από τους τελεστές του πολλαπλασιασμού είναι denormal αριθμός, τότε ο συντελεστής του θα έχει «οδηγούντα» μηδενικά (leading zeros), με αποτέλεσμα και το τελικό γινόμενο να εμφανίζει leading zeros. Υπάρχουν τότε δύο περιπτώσεις :

  1. αν ο εκθέτης του αποτελέσματος είναι μικρότερος του -126, τότε το τελικό αποτέλεσμα είναι ένας denormal αριθμός και θα πρέπει να εφαρμοστεί δεξιά ολίσθηση και αντίστοιχη αύξηση του εκθέτη (όπως περιγράφηκε προηγουμένως)
  2. αν ο εκθέτης είναι μεγαλύτερος του -126, τότε το αποτέλεσμα μπορεί να είναι ένας κανονικοποιημένος αριθμός. Το γινόμενο πρέπει να ολισθηθεί αριστερά (και αντίστοιχα να μειώνεται η τιμή του εκθέτη), μέχρι είτε ο αριθμός να κανονικοποιηθεί είτε ο εκθέτης να γίνει μικρότερος του -126

Τέλος, όταν ένας από τους τελεστές του πολλαπλασιασμού είναι 0, τότε το αποτέλεσμα είναι άμεσα γνωστό (0) και δεν χρειάζεται να γίνει ο πολλαπλασιασμός. Μέριμνα πρέπει να δοθεί στο γεγονός ότι αν ο άλλος τελεστής είναι άπειρο (με θετικό ή αρνητικό πρόσημο), το αποτέλεσμα θα πρέπει να είναι NaN και όχι 0.


Πρόσθεση Κινητής Υποδιαστολής

Η πρόσθεση κινητής υποδιαστολής είναι μια πιο πολύπλοκη διαδικασία από τον πολλαπλασιασμό. Περιλαμβάνει τέσσερις βασικές φάσεις : ολίσθηση, πρόσθεση συντελεστών, κανονικοποίηση και στρογγυλοποίηση.

Η πρώτη φάση (ολίσθηση) έχει σκοπό να εξισώσει τους εκθέτες των δύο αριθμών που πρόκειται να προστεθούν, για να καταστεί δυνατή η εκτέλεση της πράξης. Εφόσον οι αριθμοί αποκτήσουν ίδιους συντελεστές, μπορούν να προστεθούν οι συντελεστές τους. Όμως, επειδή οι συντελεστές αποθηκεύονται σε μια sign-magnitude μορφή, πριν την εκτέλεση της πρόσθεσης πρέπει να ελεγχθεί κατά πόσο είναι ομόσημοι ή ετερόσημοι. Στην πρώτη περίπτωση, αρκεί να προστεθούν οι δύο συντελεστές και να τοποθετηθεί το ίδιο πρόσημο και στο αποτέλεσμα. Στην δεύτερη, πρέπει να υπολογιστεί η απόλυτη διαφορά και να βρεθεί το πρόσημο του αποτελέσματος.

Στην συνέχεια, το αποτέλεσμα που έχει προκύψει πρέπει να κανονικοποιηθεί, καθώς υπάρχει το ενδεχόμενο να προκύψει είτε πολύ μεγάλος (στην περίπτωση της πρόσθεσης ομόσημων αριθμών) είτε πολύ μικρός αριθμός (όταν προστίθενται ετερόσημοι αριθμοί). Σε κάθε περίπτωση θα πρέπει ο εκθέτης του αποτελέσματος να προσαρμοστεί κατάλληλα.

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

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

Έστω a1 και a2 δύο αριθμοί κινητής υποδιαστολής. Έστω ei το πεδίο εκθέτη και si ο συντελεστής για κάθε έναν. Ο συντελεστής si θεωρείται ότι περιλαμβάνει και το ψηφίο που βρίσκεται στα αριστερά της υποδιαστολής (unpacked). Ο αλγόριθμος υπολογισμού του αθροίσματος των a1 και a2 περιλαμβάνει τα ακόλουθα 8 βήματα :

  1. Αν e1 < e2 , εναλλαγή (swap) των δύο εντέλων. Η εναλλαγή εξασφαλίζει ότι η διαφορά των πεδίων εκθέτη θα ικανοποιεί την ανισότητα d = e1 - e2 >= 0. Ο εκθέτης του αποτελέσματος πρέπει να τεθεί στην τιμή e1.
  2. Αν τα πρόσημα των a1 και a2 διαφέρουν, αντικατάσταση του s2 με το συμπλήρωμά του, ως προς δύο.
  3. Τοποθέτηση του s2 σε έναν 24-bit καταχωρητή. Η ποσότητα αυτή πρέπει να ολισθηθεί προς τα δεξιά κατά d = e1 - e2 θέσεις. Κατά την ολίσθηση στις πιο σημαντικές θέσεις εισάγονται μονάδες, αν κατά το προηγούμενο βήμα εφαρμόστηκε συμπλήρωμα στο s2. Από τα bits που ολίσθησαν εκτός του καταχωρητή, ένθεση του πιο σημαντικού στο g (guard bit), του επόμενου πιο σημαντικού στο r (round bit) και το λογικό OR όλων των υπολοίπων στο s (sticky bit).
  4. Υπολογισμός του S = s1 + s2 , προσθέτοντας το s1 στον 24-bit καταχωρητή που περιέχει το s2. Αν οι αριθμοί a1 και a2 είναι ετερόσημοι, το πιο σημαντικό bit του S είναι 1 και δεν υπήρξε κρατούμενο εξόδου, τότε το S είναι αρνητικό. Στην περίπτωση αυτή, αντικατάσταση του S με το συμπλήρωμά του, ως προς δύο. Πρέπει να σημειωθεί ότι αυτό μπορεί να συμβεί μόνο αν d = 0.
  5. Εκτέλεση ολίσθησης στο S ως εξής : αν οι αριθμοί είναι ομόσημοι και προέκυψε κρατούμενο εξόδου κατά το βήμα 4, πρέπει να εκτελεστεί δεξιά ολίσθηση κατά 1 θέση, θέτοντας το πιο σημαντικό bit ίσο με τη μονάδα. Διαφορετικά πρέπει να εφαρμοστεί αριστερή ολίσθηση μέχρι το αποτέλεσμα να είναι κανονικοποιημένο. Κατά την αριστερή ολίσθηση, αρχικά εισάγεται στο λιγότερο σημαντικό ψηφίο το g και στη συνέχεια μηδενικά. Τροποποίηση του εκθέτη του αποτελέσματος κατάλληλα, ανάλογα με την ολίσθηση που έγινε.
  6. Διόρθωση των r και s : αν κατά το προηγούμενο βήμα έγινε δεξιά ολίσθηση, το r πρέπει να τεθεί ίσο με το λιγότερο σημαντικό bit του S πριν την ολίσθηση και το s = g OR r OR s. Αν δεν έγινε ολίσθηση, τότε πρέπει να τεθεί r = g και s = r OR s. Αν έγινε αριστερή ολίσθηση κατά μία θέση, τα r και s δεν πρέπει να τροποποιηθούν. Αν έγινε ολίσθηση κατά δύο ή περισσότερες θέσεις, τότε πρέπει να τεθεί r = 0 και s = 0.
  7. Εφαρμογή στρογγυλοποίησης, σύμφωνα με κάποιον από τους κανόνες στρογγυλοποίησης που παρατίθενται στον σχετικό πίνακα. Αν η στρογγυλοποίηση προκαλέσει κρατούμενο εξόδου, πρέπει να γίνει δεξιά ολίσθηση στο S και να προστεθεί μία μονάδα στον εκθέτη. Το S και ο εκθέτης μετά το βήμα αυτό αντιστοιχούν στο συντελεστή και τον εκθέτη του αποτελέσματος.
  8. Υπολογισμός του προσήμου του αποτελέσματος. Αν οι a1 και a2 είναι ομόσημοι, το πρόσημο του αποτελέσματος θα είναι το κοινό πρόσημο. Αν είναι ετερόσημοι, τότε το πρόσημο του αποτελέσματος εξαρτάται από το ποιος από τους δύο είναι αρνητικός, αν έγινε εναλλαγή (swap) κατά το βήμα 1 και αν εφαρμόστηκε συμπλήρωμα ως προς δύο στο S (βλ. τον πίνακα που ακολουθεί).

Στον πίνακα που ακολουθεί παρατίθενται οι κανόνες για τον υπολογισμό του προσήμου όταν οι αριθμοί που προστίθενται είναι ετερόσημοι. Η στήλη Εναλλαγή αναφέρεται στο αν έγινε ή όχι εναλλαγή των εντέλων στο πρώτο βήμα του αλγορίθμου, ενώ η στήλη Συμπλήρωμα αναφέρεται στο αν εφαρμόστηκε συμπλήρωμα ως προς 2 κατά το βήμα 4 (όπου δεν εμφανίζονται τιμές σε αυτήν την στήλη σημαίνει ότι δεν έχει σημασία).

Εναλλαγή Συμπλήρωμα Πρόσημο1 Πρόσημο2 Πρόσημοαποτέλεσμα
ΝΑΙ   + - -
NAI   - + +
OXI OXI + - +
OXI OXI - + -
OXI NAI + - -
OXI NAI - + +



          ΠΗΓΕΣ.

1. Σχεδίαση Δυναμικά Αναδιαρθρώμενου RISC Επεξεργαστή και Υλοποίηση σε FPGA, Μπροκαλάκης Ανδρέας, Διπλωματική Εργασία, Τμήμα Μηχ. Υπολογιστών & Πληροφορικής
2. Μεθοδολογία Ανάπτυξης Μερικώς Αναδιαρθρούμενων Συστημάτων, Υλοποίηση "pipelined" Αθροιστή Κινητής Υποδιαστολής και Ενσωμάτωση σε Αναδιαρθρούμενο Επεξεργαστή, Καλογεράκης Παναγιώτης, Διπλωματική Εργασία, Τμήμα Μηχ. Υπολογιστών & ΠΛηροφορικής
3. Computer Architecture : A Quantitative Approach, J. Hennessy, D. Patterson, 2nd Edition, Morgan Kaufmann Publishers, San Fransisco, CA, 1996









Αρχική Σελίδα | Αναζήτηση | Ομάδα Ανάπτυξης | Επικοινωνία | Όροι Χρήσης
TechArticles.GR @2005 | Some rights reserved