1. Computers can’t compute
Μια εισαγωγή στο
IEEE 754
Τσαγκατάκης Γιάννης
Msc in Informatics & MultimediaMsc in Informatics & Multimedia
Department of Informatics Engineering TEI of Crete
12. 12
Ακρίβεια κωδικοποίησης
Η ακρίβεια είναι στο πλήθος των
στοιχείων (όχι στα δεκαδικά)
– 32 bit : 7-8 δεκαδικά σύμβολα
– 64 bit : 15-16 δεκαδικά σύμβολα
14. 14
Προβλήματα
● Δεν ισχύει η αντιμεταθετικότητα
a*(b*c) ≠ (a*b)*c
● Δεν ισχύει η προσεταιριστικότητα
a*(b+c) ≠ a*b+a*c
15. 15
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
16. 16
Πρακτικά θέματα
● Ποτέ δεν ελέγχουμε για ισότητα
fabs(a - b) <= FLT_EPSILON
fabs(a - b) <= epsilon * max(fabs(a), fabs(b))
● Προσοχή στις προσθέσεις αφαιρέσεις
– Αν ο ένας αριθμός είναι μικρός και ο άλλος μεγάλος
● Μαθαίνουμε την τυπική βιβλιοθήκη
● Προσοχή στα NaN, Inf
● Ψάχνουμε για τον σωστό αλγόριθμο
– Συμβουλευόμαστε ένα ειδικευμένο μαθηματικό
– Χρησιμοποιούμε καλές μαθηματικές βιβλιοθήκες
17. 17
Καταστροφή
● 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%