Διδακτικά Βιβλία του Παιδαγωγικού Ινστιτούτου

Αναζήτηση

Βρες
Εμφάνιση

Παράσταση κινητής υποδιαστολής

Συνήθως στους υπολογιστές χρησιμοποιείται η παράσταση κινητής υποδιαστολής (floating point representation).

Στην παράσταση κινητής υποδιαστολής ο δυαδικός αριθμός Ν που θέλουμε να παραστήσουμε εκφράζεται σε εκθετική μορφή (exponential representation), σαν ένα γινόμενο δηλαδή ενός κλασματικού αριθμού και μιας δύναμης του 2.

Ο αριθμός 101,011 (2) σε εκθετική μορφή μπορεί να γραφτεί με διάφορες μορφές: [pic] [pic] [pic]

Το ίδιο συμβαίνει και στο δεκαδικό σύστημα: κάθε αριθμός μπορεί να γραφτεί με πολλές εκθετικές μορφές. Το 1023 π.χ. μπορεί να γραφτεί σαν 1,023 · 103, σαν 10,23 · 102, σαν 0,001023 · 106 κλπ.

Βλέπουμε λοιπόν ότι υπάρχουν πολλές εναλλακτικές παραστάσεις ενός αριθμού σε εκθετική μορφή. Στους υπολογιστές έχει επιλεγεί μία από τις παραστάσεις αυτές, η οποία έχει την ιδιότητα 1/2 < σ < 1 και ονομάζεται κανονική μορφή (normal form).

Όταν ο συντελεστής είναι μεταξύ 1/2 και 1, έχει δύο χαρακτηριστικά:

- Το ακέραιο μέρος του είναι πάντα 0. Έτσι δε χρειάζεται να το αποθηκεύουμε, γιατί η τιμή του είναι γνωστή και δεδομένη.

- Το πρώτο του κλασματικό ψηφίο είναι πάντα 1. Αυτό συμβαίνει, γιατί, οι κλασματικοί αριθμοί που είναι μεγαλύτεροι ή ίσοι από 1/2 (=2-1), στο δυαδικό σύστημα περιέχουν πάντα τον προσθετέο 2-1.

Από όλες τις εκθετικές μορφές του αριθμού 101,011(2) που είδαμε πιο πριν, η κανονική μορφή είναι η 0,101011 . 23.

Η κανονική μορφή του αριθμού 0,000100(2) είναι η 0,100 · 2-3. Εδώ ο εκθέτης πρέπει να είναι αρνητικός, για να ικανοποιεί ο συντελεστής τη συνθήκη 1/2 < σ < 1.

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

Το κλασματικό μέρος του συντελεστή παριστάνεται σαν ένας δυαδικός αριθμός με n1 ψηφία. Εάν ο συντελεστής έχει λιγότερα από n1 ψηφία, προσθέτουμε μηδενικά στο τέλος, ενώ αν έχει περισσότερα από n1 ψηφία, τότε τον στρογγυλοποιούμε. Στη στρογγυλοποίηση (rounding), αγνοούμε τα ψηφία που περισσεύουν, αλλά, εάν το πρώτο ψηφίο που περισσεύει είναι 1, τότε προσθέτουμε 1 στο λιγότερο σημαντικό ψηφίο του συντελεστή. Ο εκθέτης παριστάνεται και αυτός σαν ένας δυαδικός αριθμός με n2 ψηφία.

Το πιο σημαντικό από τα ψηφία της λέξης, που παίζει το ρόλο του πρόσημου: έχει την τιμή Ο, αν ο αριθμός είναι θετικός και την τιμή 1 αν είναι αρνητικός. Αυτό είναι το πρόσημο του αριθμού· ο εκθέτης, όπως είδαμε, μπορεί να είναι αρνητικός, οπότε έχει το δικό του πρόσημο.

Οι πράξεις με πραγματικούς αριθμούς κινητής υποδιαστολής είναι πιο πολύπλοκες από ό,τι με τους ακεραίους.

Για να προσθέσουμε δύο πραγματικούς αριθμούς κινητής υποδιαστολής, πρέπει πρώτα να τους μετατρέψουμε ώστε να έχουν τον ίδιο εκθέτη. Αν ο ένας αριθμός έχει εκθέτη ε1 και ο άλλος ε2, και ισχύει ε1< ε2, τότε αυξάνουμε τον ε1 κατά ε2-ε1 και «ολισθαίνουμε» το συντελεστή του αριθμού αυτού προς τα δεξιά κατά ε2-ε1 ψηφία. Κατά την ολίσθηση αυτή, τα δεξιότερα ψηφία του αριθμού χάνονται, έτσι ο αριθμός μπορεί να μεταβληθεί. Το τελικό αποτέλεσμα λοιπόν μπορεί να μην είναι ακριβές.

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

Στην παράσταση κινητής υποδιαστολής με 8 ψηφία για το συντελεστή και 4 ψηφία για τον εκθέτη, ο αριθμός x = 16,125(10) παριστάνεται ως 0,10000001 · 25 και ο αριθμός y = 4,3125(10) παριστάνεται ως 0,1000101 · 23.

Πρώτα μετατρέπουμε τον αριθμό με το μικρότερο εκθέτη, που είναι ο y. Αυξάνουμε τον εκθέτη του κατά 2 και ολισθαίνουμε το συντελεστή του προς τα δεξιά κατά 2 ψηφία.

Στη συνέχεια προσθέτουμε τους δύο συντελεστές. Το άθροισμα δε χρειάζεται κανονικοποίηση, άρα είναι και το τελικό αποτέλεσμα. Η τιμή του είναι 0,10100011 · 25, δηλαδή 20,375. Το σωστό αποτέλεσμα της πρόσθεσης όμως είναι 20,4375. Το σφάλμα οφείλεται στη μετατροπή του y ώστε να έχει τον ίδιο εκθέτη με το x.

Οι πράξεις του πολλαπλασιασμού και της διαίρεσης με πραγματικούς αριθμούς κινητής υποδιαστολής είναι πιο εύκολες.

Για να πολλαπλασιάσουμε δύο αριθμούς προσθέτουμε τους εκθέτες τους και πολλαπλασιάζουμε τους συντελεστές· μετά φέρνουμε πάλι το αποτέλεσμα στην κανονική μορφή. Για να διαιρέσουμε δύο αριθμούς αφαιρούμε τους εκθέτες, διαιρούμε τους συντελεστές και κανονικοποιούμε το αποτέλεσμα.

Όπως είδαμε και στο προηγούμενο παράδειγμα, πολλές φορές η μετατροπή ή η στρογγυλοποίηση που κάνουμε στους αριθμούς κατά την εκτέλεση των πράξεων επιφέρει ένα μικρό σφάλμα στο αποτέλεσμα. Μετά από μία μεγάλη σειρά πράξεων λοιπόν, τα σφάλματα αυτά «συσσωρεύονται», οπότε τα αποτελέσματα μπορεί να μην είναι ικανοποιητικά.

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

Στην παράσταση κινητής υποδιαστολής με 5 ψηφία για το συντελεστή και 3 ψηφία για τον εκθέτη, οι κοντινότεροι αριθμοί στο Ο που μπορούμε να παραστήσουμε είναι οι: 000000001 = 0,03125(10) (θετικός) 111111111 = -0,03125(10) (αρνητικός)

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

Ο μεγαλύτερος και ο μικρότερος αριθμός που μπορούν να παρασταθούν είναι οι: 011111111 = 0,96875·27= 124(10) 100000001 = -0,96875·27 = -124(10)

Οι αριθμοί αυτοί καθορίζουν το εύρος της αναπαράστασης.

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