1. Computers can’t compute
Μια εισαγωγή στο
IEEE 754
Τσαγκατάκης Γιάννης
jtsagata@gmail.com
Msc in Informatics & MultimediaMsc in Informatics & Multimedia
Department of Informatics Engineering TEI of Crete
12. 12
Η επιστημονική αναπαράσταση
Υπολογιστής μΑριθ ός
9.46E7 9.46 x 107
9.46 x 10,000,000 94,600,000
9.46E3 9.46 x 103
9.46 x 0.001 0.009,460
9.46E2 9.46 x 102
9.46 x 100 9.46E2
3.51E5 3.51 x 105
3.51 x 0.0001 0.0000351
3.51E15 3.51 x 1015
3.51 x 0.000000000000001
0.0000000000000035
3.51E15 3.51 x 10+15
3.51 x
1,000,000,000,000,000
3,510,000,000,000,000
4.0Ε1 4.0 x 10 4
●
Πολύ μικροί η πολύ μεγάλοι αριθμοί
● Κανονικοποιημένη μορφή X.YYY... με X 0≠
●
Βάση το 10 για είσοδο έξοδο / Βάση 2 εσωτερικά (συνήθως).
●
Απλοί αριθμοί απεικονίζονται συχνά απλά.
13. 13
H αναπαράσταση του 0.1
● Ο αριθμός 0.1 χρησιμοποιείτε συχνά ως βήμα.
● Αλλά δεν έχει ακριβή αναπαράσταση στο δυαδικό.
14. 14
Το Πρόβλημα
● Τα μαθηματικά είναι συνεχή και άπειρα
● Τα υπολογιστικά μαθηματικά
είναι διακριτά και πεπερασμένα
– Οι αριθμοί δεν μπορεί να είναι
αυθαίρετα μεγάλοι η μικροί
– Υπάρχουν κενά μεταξύ τους
– Δεν υπάρχουν όλοι οι αριθμοί
(0.1, π)
15. 15
Ακρίβεια και σημαντικά στοιχεία
Ένας μηχανικός
– Κάνει πράξεις με 8
δεκαδικά ψηφία
– Σημαδεύει με κιμωλία
– Και κόβει με τσεκούρι
Ακρίβεια (Accuracy)
– Μέτρηση
●
Αξιοπιστία (Precision)
– Υπολογισμοί
●
Σημαντικά στοιχεία
– Πλήθος στοιχείων που είναι
σωστά (όχι τα δεκαδικά)
Ποια η διαφορά μιας βέργας;
– Με διάμετρο 10 mm
– Με διάμετρο 10.00 mm
10.000$
25. 25
Ακρίβεια κωδικοποίησης
●
Άλλο η ακρίβεια υπολογισμού
και άλλο τα σημαντικά στοιχεία μιας μέτρησης
● Η ακρίβεια είναι στο πλήθος των στοιχείων
(και όχι στο πλήθος των δεκαδικών στοιχείων)
– 32 bit : 7-8 δεκαδικά στοιχεία
– 64 bit : 15-16 δεκαδικά στοιχεία
26. 26
Προβλήματα αναπαράστασης
● Μόνο κλάσματα δυνάμεων του 2 έχουν ακριβή
αναπαράσταση
● Machine Epsilon
– To ½ της απόστασης του αριθμού 1 από τον αμέσως
επόμενο αριθμό
– εmachine = 2-53 ≈ 1.11 x 10-16
– float(X) = x*(1+e)
– X ⊛ Y = (X ⊛ Y)(1+e), όπου ⊛ ένας δυαδικός τελεστής {+,-,*,/}
– abs(e) < ε
machine
28. 28
Προβλήματα
● Δεν ισχύει η αντιμεταθετικότητα
a*(b*c) ≠ (a*b)*c
●
Δεν ισχύει η προσεταιριστικότητα
a*(b+c) ≠ a*b+a*c
29. 29
Intel x86 και ΙΕΕΕ 754
● Internal 80bit format x87
●
Διαφορετική σειρά εντολών,
διαφορετικά αποτελέσματα
● Extended precision
● C99/C11 long double (gcc, clang)
●
Speed over accuracy
Not Valid IEEE 754
● SSE2 instrcuction set
– Valid 754
– Ίδιο πρόγραμμα, ίδια CPU, άλλο αποτέλεσμα
– Ακόμα και για τον ίδιο compiler
●
Πολλές GPU δεν έχουν subnormals, ή έχουν 16bit float
31. 31
Που είναι το λάθος ;
●
Μια από τις 2 λύσεις έχει πρόβλημα αστάθειας
– Ειδικά αν 4αγ << β2 και τα πρόσημα είναι ίδια.
– Αφαίρεση “ίδιων” αριθμών → απώλεια σημαντικών στοιχείων
– Σύνηθες πρόβλημα στις ρίζες των πολυωνύμων
https://en.wikipedia.org/wiki/Loss_of_significance
Catastrophic
cancellation
32. 32
Η λύση της δευτεροβάθμιας
Extra Bonus :
●
Να κάνω το a=1.0
●
Ο υπολογισμός της διακρίνουσας θα πρέπει να γίνει με
διπλάσια ακρίβεια
● Fused multiply-add (fmadd) σε πολλά DSP chips
34. 34
Βελτίωση μαθηματικού αλγορίθμου
● Σε κάποια προβλήματα η
ευστάθεια και η ακρίβεια
μπορούν να βελτιωθούν με
χρήση καταλληλότερων
μαθηματικών.
● Κάποια άλλα προβλήματα
είναι από την φύση τους
ασταθή και απαιτούν
προσοχή.
Ελκυστής του Λορενζ
Lorenz Attractor
35. 35
Πρακτικά θέματα
● Ποτέ δεν ελέγχουμε για ισότητα
fabs(a - b) <= FLT_EPSILON
fabs(a - b) <= epsilon * max(fabs(a), fabs(b))
● Προσοχή στις προσθέσεις αφαιρέσεις
– Αν ο ένας αριθμός είναι μικρός και ο άλλος μεγάλος
● Μαθαίνουμε την τυπική βιβλιοθήκη
● Προσοχή στα NaN, Inf
● Ψάχνουμε για τον σωστό αλγόριθμο
– Συμβουλευόμαστε ένα ειδικευμένο μαθηματικό
– Χρησιμοποιούμε καλές μαθηματικές βιβλιοθήκες
36. 36
Συμπέρασμα
● Τα μαθηματικά είναι συνεχή και άπειρα
● Τα υπολογιστικά μαθηματικά
είναι διακριτά και πεπερασμένα
– Οι αριθμοί δεν μπορεί να είναι
αυθαίρετα μεγάλοι η μικροί
– Υπάρχουν κενά μεταξύ τους
● Οι υπολογιστές δεν κάνουν
“σωστούς” υπολογισμούς
37. 37
Καταστροφή
●
Ariane 5 (1996)
– uint_64t →int16_t
– $500 million
● Patriot Missile Failure (1991)
– Dont use floats for time
– 28 νεκροί Αμερικάνοι στρατιώτες
●
The sinking of the
Sleipner (1991)
$700 million
F.E.M. σφάλμα 35%
39. 39
Για περισσότερα
● What you never wanted to know about floating
point but will be forced to find out
http://www.volkerschatz.com/science/float.html
● What Every Computer Scientist Should Know About
Floating-Point Arithmetic
https://docs.oracle.com/cd/E19957-01/806-3568/n
cg_goldberg.html