Παράδειγμα # ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟΔΙΑΣΤΟΛΗΣ ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης Άσκηση α. Να στρογγυλοποιηθούν οι παρακάτω αριθμοί σε 4 σημαντικά ψηφία. 3 8 7.0045, 79.830, 73448,,, 7 9 3 Στρογγυλοποίηση σε 4 σημαντικά ψηφία: -7.0045-7.00-79.830-79.8 73448 734000 3/7 0.765 -/9-0.053-8/3 -.667 β. Να στρογγυλοποιηθούν οι παρακάτω αριθμοί σε 3 σημαντικά ψηφία και σε 3 δεκαδικά ψηφία. 9397.0045, 0.08330, 0.08765, 0.06735, 0.8375005 Στρογγυλοποίηση σε 3 σημαντικά ψηφία και 3 δεκαδικά ψηφία (3 σημαντικά) (3 δεκαδικά) -9397.0045-93900 -9397.005 0.08330 0.0833 0.083-0.08765 0.0877-0.088 0.06735 0.0674 0.067-0.8375005 0.838-0.838 γ. Δίνεται η συνάρτηση f =. Να βρεθεί το ολικό σφάλμα στο σημείο =0.307 3 + χρησιμοποιώντας ακρίβεια το πολύ 3 σημαντικά ψηφία.
Το ακριβές στο οποίο πρέπει να γίνει ο υπολογισμός της f ( ) είναι =0.307 και η τιμή της υπολογίζεται ως: 0.307 0.307 f ( 0.307) = = = 0.84 3 + 0.307.009 Με χρήση 3 σημαντικών ψηφίων το σημείο υπολογισμού γίνεται =0.3. Η τιμή της συνάρτησης f ( ) χρησιμοποιώντας ακρίβεια 3 σημαντικά ψηφία υπολογίζεται ως: 0.3 0.3 0.3 0.3 + 0.3.00 f = = = 3 Το ολικό σφάλμα υπολογίζεται ως: f ( ) f ε = = 0.0006 Άσκηση Πως ορίζεται και τι σημαίνει ο όρος flop στους επιστημονικούς υπολογισμούς. Βρείτε τον χρόνο που απαιτείται στον υπολογιστή σας για να εκτελέσετε Kflop, Mflop, Gflop, Tflop. Ο όρος flop σημαίνει floating point operation (πράξη μεταξύ αριθμών κινητής υποδιαστολής) και ορίζεται ως ο χρόνος που χρειάζεται ένας υπολογιστής για να υπολογίσει έναν πολλαπλασιασμό και μία πρόσθεση μαζί, δηλαδή y a+y, συν τον χρόνο που απαιτείται για την ανάκτηση από την μνήμη RAM των δεδομένων που εμπλέκονται στις δύο αυτές πράξεις. Οι ποσότητες a και είναι σταθερές και γνωστές όπως επίσης γνωστή και η αρχική τιμή της ποσότητας y. To flop αποτελεί μονάδα μέτρησης της ταχύτητας του επεξεργαστή και σημείο αναφοράς όταν συγκρίνεται η ταχύτητα υπολογισμών ανάμεσα σε Η/Υ. Πρόγραμμα για τον υπολογισμό του χρόνου που απαιτείται για την εκτέλεση n flops.
Program Flop implicit none real8::a,,y,ts,tf integer8::i,n print,'give ma number of flops' read,n a=. =. y=0. i= Call Cpu_time(ts) do i=,n y=a+y enddo Call Cpu_time(tf) print, 'the time needed for the evaluation of',n,' flops is' print, tf-ts,'sec' end Ο παραπάνω κώδικας δίνει τους εξής χρόνους με ακρίβεια 5 σημαντικών ψηφίων. Αριθμός flops Χρόνος (sec) Kflop=04 flops 0.0000 Mflop=04 flops 0.0000 Gflop=04 3 flops 8.88 Tflop=04 4 flops 8736. 6 8.88 04 Άσκηση 3 Να υπολογισθούν οι ρίζες της αλγεβρικής εξίσωσης + 3000.00+ 3 = 0. Οι υπολογισμοί να γίνουν α) σε υποθετικό υπολογιστή πέντε σημαντικών ψηφίων και β) στον υπολογιστή σας για απλή και διπλή ακρίβεια. Οι σωστές ρίζες της εξίσωσης είναι = 0.00 και = 3000. Εάν το σχετικό σφάλμα είναι μεγαλύτερο του %, εφαρμόστε τον εναλλακτικό τύπο:, c = ± b b 4ac
Αφού αποδείξτε τον εναλλακτικό τύπο, εξετάστε το σχετικό σφάλμα των αποτελεσμάτων και εξηγήστε γιατί τα αποτελέσματα βελτιώνονται σημαντικά. Απόδειξη του εναλλακτικού τύπου: c c b b ac c b + b ac b b ac b + b 4ac b + b 4ac b b 4ac b b + 4ac a 4 4 + 4 = = = = c b + b 4ac c b b 4ac 4 = = = = c b b ac b b 4ac b b 4ac b + b 4ac b b + 4ac a α. Σε υποθετικό υπολογιστή 5 σημαντικών ψηφίων χρησιμοποιώντας τον τύπο θα έχουμε: a= b= c= b =.0000, 3000.0, 3.0000, 9000000 4ac =.000, b 4ac = 9000000, b 4ac = 3000.0 b ± b 4ac Με τον τύπο, = υπολογίζουμε τις δύο ρίζες και τα σχετικά σφάλματα ως: a 3000.0 + 3000.0 0 ( 0.00) = = 0, ε = = 00% = 00%.0000 0.00 3000.0 3000.0 3000 ( 3000) = = 3000.0, ε = = 000% = 0%.0000 3000 c Αντίστοιχα για, = υπολογίζουμε τις δύο ρίζες και τα σχετικά σφάλματα ως: b ± b 4ac 6.0000 0.00 ( 0.00) = = 0.000000, ε = = 000% = 0% 3000.0 + 3000.0 0.00 6.0000 6.0000 = = (δεν υπολογίζεται), ε : δεν υπολογίζεται 3000.0 3000.0 0 Eίναι προφανές ότι με τον κλασσικό τύπο το σχετικό σφάλμα της τιμής της ης ρίζα είναι αντίστοιχο με την ακρίβεια του Υ/Η, ενώ αντίθετα το σχετικό σφάλμα της ης ρίζας είναι αρκετά μεγαλύτερο. Με την χρήση του εναλλακτικού τύπου το η ακρίβεια υπολογισμού της ης ρίζας βελτιώνεται σημαντικά ενώ η τιμή της ης ρίζα αλλοιώνεται τελείως.
β. Ο υπολογισμός των ριζών σε πραγματικό υπολογιστή γίνεται με το παρακάτω πρόγραμμα program rizes!apli akribeia!real4:: a,b,c,d,,,e,e,anal,anal!dipli akribeia real8:: a,b,c,d,,,e,e,anal,anal anal=-0.00 anal=-3000 a= b=3000.00 c=3 D=bb-4ac!Klassikos tipos!=(-b+sqrt(d))/(a)!=(-b-sqrt(d))/(a)!enallaktikos tipos =-(c)/(b+sqrt(d)) =-(c)/(b-sqrt(d)) e=abs((-anal)/anal)00 e=abs((-anal)/anal)00 print,,e print,,e end program rizes Ο παραπάνω κώδικας μπορεί να δώσει τις ρίζες της εξίσωσης με βάση τον κλασσικό ή τον εναλλακτικό τύπο για μονή και διπλή ακρίβεια. Τα αποτελέσματα συνοψίζονται στον πίνακα: Real4 (Απλή ακρίβεια) b ± b 4ac c Τύπος:, = Τύπος:, = a b ± b 4ac =-0.000988833 =-0.000000000 e=.787% e= 0%
Real (Διπλή ακρίβεια) = -3000.000 e= 0% =-0.0000000000770706 e=0.00000397903936% = -999.9999765649 e= 0.0000007850493% = -3035.573 e=.85758% =-0.00000000007850 e=0.0000039684946807% = -999.99997687883 e=0.000000770705808% Συμπερασματικά, λοιπόν, παρατηρείται ότι ο εναλλακτικός τύπος βελτιώνει σημαντικά το σχετικό σφάλμα στη η ρίζα. Αυτό είναι αναμενόμενο αφού παρακάμπτεται η ανάγκη υπολογισμού της ποσότητας b + b 4ac. Αντίθετα, όταν ο εναλλακτικός τύπος εφαρμόζεται στον υπολογισμό της ης ρίζας η ποσότητα αυτή ξαναεμφανίζεται και μάλιστα στον παρονομαστή με συνέπεια το σχετικό σφάλμα των υπολογισμών να είναι υποδεέστερο της ακρίβειας του Η/Υ. Επομένως εφαρμόζεται τον κλασσικό τύπο για τον υπολογισμό της ης εναλλακτικό τύπο για τον υπολογισμό της ης ρίζας. ρίζας και τον Άσκηση 3 Οι ρίζες της εξίσωσης + 6.0+ = 0 είναι = 0.06073 και = 6.08390. Στην παραπάνω εξίσωση b >> 4ac και ο υπολογισμός του προϋποθέτει την αφαίρεση ανάμεσα σε περίπου ίσους αριθμούς. Έστω ότι οι υπολογισμοί γίνονται σε Η/Υ που αποθηκεύονται 4 σημαντικά ψηφία. Να βρεθούν τα και και να υπολογισθεί το σχετικό σφάλμα. Στην συνέχεια να υπολογισθούν πιο ακριβή αποτελέσματα εφαρμόζοντας τον αναγωγικό τύπο b ( b 4ac) =. a b b 4ac Οι ρίζες του πολυωνύμου με βάση τον κλασσικό τύπο υπολογίζονται ως: b + b 4ac 6.0 + 6.0 4 6.0 + 6.07 = = = = 0.05 a b b 4ac 6.0 6.0 4 6.0 6.07 = = = = 6.09 a Τα αντίστοιχα σφάλματα με βάση τις ακριβείς ρίζες δίνονται ως:
0.06073 0.05 ε = = = = 0.06073 6.08390 6.09 ε = = = = 6.08390 6.87 0 6.87% 5 9.85 0 0.009.85% Χρησιμοποιώντας τον εναλλακτικό τύπο για την εύρεση του έχουμε: b ( b 4ac) c = = = = = 0.06 a b b 4ac b b 4ac 6.0 6.0 4 6.0 6.07 Ενώ το σχετικό σφάλμα είναι: 0.06073 ( 0.06) 4 ε = = =.7 0 = 0.07% 0.06073 Φαίνεται ότι ο εναλλακτικός τύπος μειώνει σημαντικά το σχετικό σφάλμα της πρώτης ρίζας καθώς παρακάμπτει την αφαίρεση μεταξύ περίπου ίσων αριθμών.