Μαθηματικοί Υπολογισμοί Χειμερινό Εξάμηνο η Διάλεξη Παράσταση Αριθμών στον Υπολογιστή – Σφάλματα Οκτώβρη 2002
Μαθηματικοί Υπολογισμοί 2 Περιεχόμενα Παράσταση ακεραίων Συμβολικές παραστάσεις Παραστάσεις κινητής και σταθερής-υποδιαστολής Υπερεκχείλιση και υποεκχείλιση Πρότυπο κινητής-υποδιαστολής του ΙΕΕΕ Το σύστημα κινητής-υποδιαστολής του Maple Ποια παράσταση είναι πιο κατάλληλη για... Αριθμητική με Ανακριβείς Αριθμούς Σφάλμα Στρογγύλευσης Αριθμητικής Υποδιαστολής Μαθηματικές Ιδιότητες Αριθμητικής Κινητής- Υποδιαστολής Παραδείγματα Καταστροφικών Υπολογισμών Πως μπορούμε να αποφύγουμε τα προβλήματα;
Μαθηματικοί Υπολογισμοί 3 Παράσταση Αριθμών Τα Μαθηματικά μοντέλα σχεδόν πάντα περιλαμβάνουν κάποιους αριθμούς. Όταν υλοποιούμε κάποιο μοντέλο, πρέπει να παραστήσουμε τους αριθμούς αυτούς στον υπολογιστή. Θα δούμε τρόπους παράστασης ακεραίων και πραγματικών αριθμών. Μπορούμε να κρίνουμε μια παράσταση με διάφορους τρόπους: Ποιο είναι το εύρος των αριθμών που παριστά; Πόσο ακριβής είναι η παράσταση; Πόσο αποδοτική είναι η παράσταση όσον αφορά απαιτούμενο χρόνο και χρόνο; Η Maple μπορεί να παραστήσει αριθμούς με πολλούς τρόπους. Οι περισσότερες γλώσσες προγραμματισμού στην προσπάθειά τους για βέλτιστη αποδοτικότητα είναι ιδιαίτερα περιοριστικές.
Μαθηματικοί Υπολογισμοί 4 Παράσταση ακεραίων Τόσο ο ανθρώπινος νους όσο και οι υπολογιστές παραστούν τους θετικούς ακέραιους με χρησιμοποιώντας συμβολισμό σχετικής θέσης των ψηφίων και κάποια βάση b (=2 ή 10). Η ακολουθία των ακέραιων ψηφίων με παριστά την ποσότητα Το σχήμα αυτό μπορεί να επεκταθεί και για αρνητικούς ακέραιους αριθμούς με πολλούς τρόπους. Υπάρχουν και άλλα σχήματα αλλά δεν χρησιμοποιούνται συχνά.
Μαθηματικοί Υπολογισμοί 5 Ακέραιοι σταθερού ή αορίστου μεγέθους Σε όλες σχεδόν τις γλώσσες προγραμματισμού, υπάρχει σαφές όριο στο μέγεθος του ακέραιου που μπορεί να παρασταθεί – πχ, πόσα ψηφία (bits) επιτρέπονται. Κύριος λόγος είναι η αποδοτικότητα. Εάν προσπαθήσουμε να υπολογίσουμε μεγαλύτερους ακέραιους θα πάρουμε είτε ένα μήνυμα λάθους είτε εσφαλμένη απάντηση. Στην Maple, οι ακέραιοι μπορεί να είναι οσοδήποτε μεγάλοι. Ο μόνος περιορισμός είναι η διαθέσιμη μνήμη. > 2^1000; \ \ \ \ \ \ \ \ 376
Μαθηματικοί Υπολογισμοί 6 Κλάσματα Έστω ότι πρέπει να παραστήσουμε έναν αριθμό που δεν είναι ακέραιος – πχ. 1/3 Στις περισσότερες γλώσσες προγραμματισμού, τέτοιοι αριθμοί συνήθως δεν μπορούν να παρασταθούν ακριβώς. Η Maple μπορεί, κάνει επίσης πράξεις με κλάσματα, όπως κάνουμε και εμείς με χαρτί και μολύβι: > 5/15; 1/3 > 1/3+1/4; 7/12 > * (1/ / / );
Μαθηματικοί Υπολογισμοί 7 Άλλες συμβολικές παραστάσεις Η Maple μπορεί επίσης να παραστήσει αριθμούς συμβολικά με πολλούς διαφορετικούς τρόπους: > sqrt(4*5); > 1/sqrt(2); > sqrt(2)*sqrt(50); 10 > sin(Pi/8); Όλες οι παραπάνω παραστάσεις είναι ακριβείς. Το κόστος της ακρίβειας είναι ότι τέτοιες παραστάσεις μπορεί να γίνουν εύκολα περίπλοκες και δύσχρηστες.
Μαθηματικοί Υπολογισμοί 8 Προσεγγιστικές παραστάσεις Οι περισσότεροι αριθμητικοί υπολογισμοί γίνονται με προσεγγιστικές παραστάσεις αριθμών. Οι παραστάσεις αυτές παραμένουν απλές ακόμα και μετά από συνεχείς και πολύπλοκες πράξεις – μειώνεται όμως βαθμιαία η ακρίβειά τους. Δύο είναι τα βασικά σχήματα παράστασης που χρησιμοποιούνται στην πράξη, ξεχωρίζονται με βάση τύπο του επιτρεπόμενου σφάλματος: Οι παραστάσεις σταθερής-υποδιαστολής έχουν σφάλματα προκαθορισμένου απόλυτου μεγέθους (πχ ). Οι παραστάσεις κινητής-υποδιαστολής έχουν σφάλματα προκαθορισμένου σχετικού μεγέθους (πχ +- 1%). Και στις δύο περιπτώσεις, οι αριθμοί μπορούν να αποθηκευθούν σε θέσης μνήμης σταθερού μεγέθους και μπορεί να χρησιμοποιηθεί ειδικό ήλεκτρο-μηχανολογικό για να εκτελεσθούν πράξεις με αυτούς ταχύτατα.
Μαθηματικοί Υπολογισμοί 9 Παραστάσεις σταθερής-υποδιαστολής Η παράσταση σταθερής υποδιαστολής μας επιτρέπει να έχουμε μόνον αριθμούς το κλασματικό μέρος των οποίων μπορεί να γραφθεί με έναν προκαθορισμένο αριθμό ψηφίων (δεκαδικών ή δυαδικών). Για παράδειγμα, εάν επιτρέψουμε μόνον τρία ψηφία στο κλασματικό μέρος 0.138, , 8.900, Μπορούμε να παραστήσουμε ακριβώς αριθμούς όπως 0.138, , 8.900, , , Δεν μπορούμε να παραστήσουμε ακριβώς αριθμούς όπως , τους οποίους πρέπει να τους στρογγυλέψουμε σε 3.188, Επιπρόσθετα, συνήθως υπάρχει ένα άνω όριο στο επιτρεπόμενο μέγεθος των αριθμών σταθερής υποδιαστολής. Οι παραστάσεις σταθερής υποδιαστολής μπορούν να θεωρηθούν σαν παραστάσεις σταθμισμένων-ακεραίων. Χρησιμοποιούμε τον ακέραιο i για να παραστήσουμε τον αριθμό ixS, όπου S κάποια παράμετρος στάθμισης (παραπάνω το S είναι ).
Μαθηματικοί Υπολογισμοί 10 Παραστάσεις κινητής-υποδιαστολής Η παράσταση κινητής υποδιαστολής μας επιτρέπει να έχουμε μόνον αριθμούς οι οποίοι μπορούν να γραφθούν με έναν προκαθορισμένο αριθμό ψηφίων (δεκαδικών ή δυαδικών) ανεξάρτητα εάν αυτά αφορούν το ακέραιο ή το κλασματικό μέρος. Για παράδειγμα, εάν επιτρέψουμε μόνον τρία ψηφία: 1.45, , 90400, Μπορούμε να παραστήσουμε ακριβώς αριθμούς όπως 1.45, , 90400, , , , , Δεν μπορούμε να παραστήσουμε ακριβώς αριθμούς όπως 12.81, , τους οποίους πρέπει να τους στρογγυλέψουμε σε 12.8, , Ένας αριθμός σε μορφή κινητής υποδιαστολής μοιάζει με τους αριθμούς «επιστημονικού συμβολισμού». Με αυτόν τον συμβολισμό οι παραπάνω αριθμοί γράφονται ως εξής: Σημειώστε ότι το δεκαδικό μέρος (mantissa) είναι στο (0,1) και ο εκθέτης δηλώνει στην κλιμάκωση του αριθμού.
Μαθηματικοί Υπολογισμοί 11 Υπερεκχείλιση και υποεκχείλιση Οι αριθμοί κινητής-υποδιαστολής έχουν περιορισμένη ακρίβεια η οποία καθορίζεται από το μέγεθος της mantissa. Συνήθως, έχουν επίσης και περιορισμένο πεδίο, επειδή υπάρχει περιορισμός στο μέγεθος του εκθέτη. Υπερεκχείλιση, συμβαίνει όταν παρουσιασθεί ένας αριθμός με πολύ μεγάλο θετικό εκθέτη. Ανάλογα με την μηχανή και την γλώσσα προγραμματισμού που χρησιμοποιούμε, υπερεκχείλιση μπορεί είτε Nα έχει σαν αποτέλεσμα τον τερματισμό της εκτέλεσης του προγράμματός μας, είτε Να μας οδηγήσει σε έναν ειδικό αριθμό (Inf) Υποεκχείλιση, συμβαίνει όταν παρουσιασθεί ένας αριθμός με πολύ μεγάλο αρνητικό εκθέτη. Η υποεκχείλιση είναι λιγότερο προβληματική από την υπερεκχείλιση. Μια και ο αριθμός είναι πολύ μικρός μπορεί κανείς να τον αντικαταστήσει με το μηδέν. Κάτι τέτοιο όμως ίσως μας οδηγήσει σε ανεπιθύμητα αποτελέσματα μερικές φορές.
Μαθηματικοί Υπολογισμοί 12 Πρότυπο κινητής-υποδιαστολής του ΙΕΕΕ Παλαιότερα οι υπολογιστές χρησιμοποιούσαν πολλούς διαφορετικούς ο καθένας τρόπους παράστασης κινητής-υποδιαστολής. Εδώ και σχεδόν μια δεκαετία η συντριπτική πλειοψηφία τους χρησιμοποιεί το πρότυπο που όρισε το ΙΕΕΕ. Το πρότυπο αυτό καθορίζει δύο δυαδικές παραστάσεις. Για τους μονής ακρίβειας αριθμούς κινητής-υποδιαστολής, ο δυαδικός εκθέτης διακυμαίνεται από -126 έως +127, προσφέροντάς μας την δυνατότητα να παραστήσουμε αριθμούς περίπου έως. Η δυαδική mantissa έχει 24 bits (ένα αόρατο), δίνοντας μας την δυνατότητα ακρίβειας περίπου 6 δεκαδικών ψηφίων. Για τους διπλής ακρίβειας αριθμούς κινητής-υποδιαστολής, ο δυαδικός εκθέτης διακυμαίνεται από έως +1023, προσφέροντάς μας την δυνατότητα να παραστήσουμε αριθμούς περίπου έως. Η mantissa έχει 53 bits (ένα αόρατο), δίνοντας μας την δυνατότητα ακρίβειας περίπου 15 δεκαδικών ψηφίων. Η Maple χρησιμοποιεί το σύστημα κινητής-υποδιαστολής του υπολογιστή στον οποίο τρέχει, μόνον εάν της ζητηθεί (με χρήση της evalhf), ειδάλλως χρησιμοποιεί το δικό της σχήμα παράστασης αριθμών.
Μαθηματικοί Υπολογισμοί 13 Το σύστημα κινητής-υποδιαστολής του Maple Η Maple χρησιμοποιεί δεκαδικό σύστημα κινητής υποδιαστολής, η αριθμητική του οποίου γίνετε με χρήση λογισμικού. Αυτό συνεπάγεται ότι είναι πολύ πιο αργή, συγκριτικά με εάν η αριθμητική γινόταν με χρήση ήλεκτρο- μηχανολογικού, αλλά έχει και τα πλεονεκτήματά του. Η Maple επιτρέπει να αυξήσουμε τον εκθέτη (σχεδόν) όσο θέλουμε, και συνεπώς δεν έχουμε φαινόμενα εκχείλισης. Μπορούμε στην Maple να καθορίσουμε την ακρίβεια της αριθμητικής κινητής-υποδιαστολής δίνοντας την ανάλογη τιμή στην μεταβλητή της Digits. Πχ. > Digits:=5; Digits := 5 > evalf(Pi); > Digits:=30; Digits := 30 > evalf(Pi);
Μαθηματικοί Υπολογισμοί 14 Παραστώντας Αριθμούς Ορίστε μια εικόνα αριθμών που μπορούν να παρασταθούν σε σύστημα σταθερής-υποδιαστολής (με 2 κλασματικά ψηφία) και σε σύστημα κινητής-υποδιαστολής (με 2 συνολικά ψηφία) Το ποια παράσταση είναι καλλίτερη εξαρτάται από το αναμενόμενο μέγεθος των αριθμών, και τους επιτρεπόμενους τύπους σφαλμάτων. κινητής-υποδιαστολής σταθερής-υποδιαστολής
Μαθηματικοί Υπολογισμοί 15 Ποια παράσταση είναι πιο κατάλληλη για... Το πλήθος των παραπόνων των πελατών που λαμβάνει μια εταιρεία σε κάποιο χρονικό διάστημα. Το ύψος μιας ομάδας παιδιών. Ο πληθυσμός της γης σε διάφορες χρονικές στιγμές. Η συγκέντρωση κάποιου ρυπαντή που παρατηρήθηκε ή προβλέφθηκε για την πόλη του Ηρακλείου. Η κατεύθυνση (μοίρες δυτικά από βόρεια) την οποία ακολουθούν τα μεταναστευτικά πουλιά πάνω από την Κρήτη.
Μαθηματικοί Υπολογισμοί 16 Αριθμητική με Ανακριβείς Αριθμούς Τι θα συμβεί όταν προσπαθήσουμε να εκτελέσουμε πράξεις με αριθμούς μη ακριβής παράστασης κινητής ή σταθερής- υποδιαστολής; Συχνά, το αποτέλεσμα δεν μπορεί να παρασταθεί ακριβώς. Στην καλλίτερη περίπτωση θα έχουμε ένα στρογγυλεμένο αποτέλεσμα – τον πλησιέστερο, στο ακριβές αποτέλεσμα, αριθμό που μπορεί να παρασταθεί. Τέτοιο σφάλμα στρογγύλευσης μπορεί να συσσωρευτεί κατά την διάρκεια πολλών διαδοχικών υπολογισμών με σύνηθες αποτέλεσμα η τελική υπολογισθήσα απάντηση να μην έχει καμία απολύτως έννοια. Σφάλματα στρογγύλευσης μπορούν επίσης, πολύ εύκολα, να ακυρώσουν την ισχύ βασικών μαθηματικών ιδιοτήτων των πραγματικών αριθμών – πχ. Α+Β = Β+Α.
Μαθηματικοί Υπολογισμοί 17 Σφάλμα Στρογγύλευσης Αριθμητικής Σταθερής-Υποδιαστολής Η πρόσθεση και η αφαίρεση στην αριθμητική σταθερής- υποδιαστολής είναι ακριβείς (εάν δεν έχουμε εκχειλίσεις). Για παράδειγμα (με 2 κλασματικά ψηφία): = 4.91, χωρίς σφάλμα στρογγύλευσης. Ο πολλαπλασιασμός και η διαίρεση δεν είναι ακριβείς Για παράδειγμα: 1.01x2.22=2.2422, που στρογγυλεύεται στο Δεν ισχύουν όλες οι ιδιότητες που θα περιμένατε. Για παράδειγμα: 0.01 x (0.1 x ) = 0.20 αλλά (0.01 x 0.01) x = x ( ) = 0.01 αλλά 0.01 x x 0.3 = 0.00
Μαθηματικοί Υπολογισμοί 18 Σφάλμα Στρογγύλευσης Αριθμητικής Κινητής-Υποδιαστολής Η πρόσθεση και η αφαίρεση στην αριθμητική κινητής-υποδιαστολής δεν είναι ακριβείς. Για παράδειγμα (με 3 συνολικά ψηφία): = στρογγυλεύεται σε – 259 = 3041 στρογγυλεύεται σε = στρογγυλεύεται σε 381 Ούτε ο πολλαπλασιασμός και η διαίρεση δεν είναι ακριβείς. Για παράδειγμα(με 2 συνολικά ψηφία): 1.1 x 2200 = 2320 στρογγυλεύεται σε 2300
Μαθηματικοί Υπολογισμοί 19 Μαθηματικές Ιδιότητες Αριθμητικής Κινητής-Υποδιαστολής Η Αριθμητική Κινητής-Υποδιαστολής υπακούει σε κάποιες από τις ιδιότητες των πραγματικών αριθμών: x + y = y + x x y = y x Εάν x 0, τότε x+c < y+c Δεν υπακούει όμως σε άλλες ιδιότητες, όπως βλέπουμε παρακάτω (με ακρίβεια 2 ψηφίων): ( ) = 10 αλλά 10 + ( ) = 11 ( ) – 10 = 100 (49 x 0.5) x 0.5 = 13 αλλά 49 x ( ) = 12 (49 / 2) x 2 = αλλά ?
Μαθηματικοί Υπολογισμοί 20 2 περιπτώσεις καταστροφικού σφάλματος στρογγύλευσης Το φαινόμενο της ακύρωσης μπορεί να εμφανισθεί όταν αφαιρούμε δύο ποσότητες. Το αποτέλεσμα τότε έχει πολύ λιγότερα ψηφία ακρίβειας από τους τελεστές. Για παράδειγμα, με 9 ψηφία: – = Εάν οι τελεστές αυτοί έχουν προηγουμένως στρογγυλευθεί, η απάντηση θα έχει ακρίβεια μόνον 2 ψηφίων. Κορεσμός παρατηρείται όταν η πρόσθεση ενός μη-μηδενικού αριθμού δεν επιφέρει καμία αλλαγή. Για παράδειγμα, με 9 ψηφία: = Αυτό δεν είναι τόσο σημαντικό εάν συμβεί μόνον μια φορά, αλλά τι θα συμβεί εάν προσθέσουμε το ένα εκατομμύριο φορές; Η ακριβής λύση θα είναι ενώ το αποτέλεσμά μας θα είναι – λάθος στο 4ο ψηφίο.
Μαθηματικοί Υπολογισμοί 21 Ένα Παράδειγμα Καταστροφικών Υπολογισμών Θέλουμε να υπολογίσουμε το κέρδος μιας εταιρείας κατά το παρελθόν έτος, με βάση τα μηνιαία έσοδα και έξοδα (σε εκ. ευρώ). Ας χρησιμοποιήσουμε αριθμητική κινητής υποδιαστολής με 3 ψηφία... Digits := 3: > esoda := [ 81.9, 28.1, 13.9, 30.7, 22.1, 79.8, > 43.2, 31.0, 34.9, 88.1, 52.3, 67.3 ]: > eksoda:= [ 82.1, 27.8, 13.9, 30.2, 22.2, 79.5, > 43.0, 30.7, 35.2, 87.8, 52.1, 67.2 ]: > synolika—esoda := sum(esoda[i],i=1..12); synolika—esoda := 573. > synolika—eksoda:= sum(eksoda[i],i=1..12); synolika—eksoda := 572. > synolika—esoda synolika—eksoda; 1. Η απάντηση: Συνολικό κέρδος 1 εκ. Ευρώ. Αυτό, όπως βλέπουμε παρακάτω, είναι πολύ λάθος: > sum(esoda[i] eksoda[i],i=1..12); 1.6
Μαθηματικοί Υπολογισμοί 22 Πως μπορούμε να αποφύγουμε τα προβλήματα; Βρες μια εκτίμηση του πόσο μεγάλο μπορεί να γίνει το σφάλμα στρογγύλευσης και σιγουρέψου ότι κάτι τέτοιο είναι αποδεκτό (a-priori ανάλυση). Παράδειγμα: Το συνεπαγόμενο σφάλμα κατά την πρόσθεση Ν αριθμών κινητής-υποδιαστολής στο διάστημα (-1,1) με αριθμητική d ψηφίων πρέπει να είναι μικρότερο από όπου Χρησιμοποίησε το σχήμα αριθμητικής διαστήματος, το οποίο χρησιμοποιεί τον υπολογιστή για να ελέγξει πόσο μεγάλο μπορεί να γίνει το σφάλμα. Σε κάθε περίπτωση: Προσοχή για πιθανές παγίδες. Επαγρύπνηση για σημάδια που φανερώνουν πιθανά προβλήματα ακρίβειας. Χρησιμοποίησε άφθονη ακρίβεια, εκτός και σε ενδιαφέρει πολύ η ταχύτητα εκτέλεσης.