SlideShare a Scribd company logo
1 of 41
Download to read offline
Computers can’t compute
Μια εισαγωγή στο
IEEE 754
Τσαγκατάκης Γιάννης
jtsagata@gmail.com
Msc in Informatics & MultimediaMsc in Informatics & Multimedia
Department of Informatics Engineering TEI of Crete
2
Ας γράψουμε λίγη Python
Τι θα κάνει ο παρακάτω κώδικας;
3
Ας γράψουμε λίγη Python
Εύκολο ! 0.1, 0.2, 0.4, 0.8, 0.6,
0.2, 0.4, 0.8, 0.6,
0.2, 0.4, 0.8, 0.6,
...
4
Ας εκτελέσουμε το πρόγραμμα
5
Ας εκτελέσουμε το πρόγραμμα
6
Ας εκτελέσουμε το πρόγραμμα
7
Διερεύνση
Τι πραγματικά κάνει ο παραπάνω κώδικας!
8
Διερεύνηση
9
Ας γράψουμε λίγη C++
10
Γιατί;
fsum: 1.0000001192092895508
fprod: 1
dprod: 1
Intel(R) Core(TM) i5-4300U CPU
Γιατί;
fsum: 1.0000001192092895508
fprod: 1
dprod: 1.0000000149011611938
XilinX fpga
Γιατί;Γιατί;
No constexpr
optimizations
11
Γιατί;Γιατί;Γιατί;Γιατί;
224
!!! ERROR on iteration 16777217 !!!
12
Η επιστημονική αναπαράσταση
Υπολογιστής μΑριθ ός
9.46E7 9.46 x 107
9.46 x 10,000,000 94,600,000
9.46E­3 9.46 x 10­3
9.46 x 0.001 0.009,460
9.46E2 9.46 x 102
9.46 x 100 9.46E2
3.51E­5 3.51 x 10­5
3.51 x 0.0001 0.0000351
3.51E­15 3.51 x 10­15
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
H αναπαράσταση του 0.1
● Ο αριθμός 0.1 χρησιμοποιείτε συχνά ως βήμα.
● Αλλά δεν έχει ακριβή αναπαράσταση στο δυαδικό.
14
Το Πρόβλημα
● Τα μαθηματικά είναι συνεχή και άπειρα
● Τα υπολογιστικά μαθηματικά
είναι διακριτά και πεπερασμένα
– Οι αριθμοί δεν μπορεί να είναι
αυθαίρετα μεγάλοι η μικροί
– Υπάρχουν κενά μεταξύ τους
– Δεν υπάρχουν όλοι οι αριθμοί
(0.1, π)
15
Ακρίβεια και σημαντικά στοιχεία
Ένας μηχανικός
– Κάνει πράξεις με 8
δεκαδικά ψηφία
– Σημαδεύει με κιμωλία
– Και κόβει με τσεκούρι
Ακρίβεια (Accuracy)
– Μέτρηση
●
Αξιοπιστία (Precision)
– Υπολογισμοί
●
Σημαντικά στοιχεία
– Πλήθος στοιχείων που είναι
σωστά (όχι τα δεκαδικά)
Ποια η διαφορά μιας βέργας;
– Με διάμετρο 10 mm
– Με διάμετρο 10.00 mm
10.000$
16
Στην πράξη
C/Java
Τι τύπο θα χρησιμοποιήσεις
για την τιμή ενός προϊόντος;
17
Πέραν των ακεραίων
●
Αριθμοί σταθερής υποδιαστολής
●
Rational Arithmetic
●
Binary-coded decimal (BCD)
●
Logarithmic number Systems (LMS)
●
Bignum (arbitrary precision)
●
Computer algebra systems
●
Αριθμοί κινητής υποδιαστολής
DSP
ΙΕΕΕ 754
22/7
18
Ιστορία
●
~1600 πχ. Βαβυλώνα. 60-δικό σύστημα αρίθμησης
●
1630 Λογαριθμικός κανόνας. Δεκαδική βάση.
●
1914 Leonardo Torres y Quevedo, Babbage's Analytical Engine
● 1941 Konrad Zuse's Z3, δυαδική βάση, 14+7+1
●
1985 William Kahan, Πρώτο IEEE 754
●
2008 IEEE 754r
(gcc: __float80,__float128,_Decimal32,_Decimal64,_Decimal128,__fp16 (arm) )
19
IEEE 754
● Η ποιο χρησιμοποιούμενη αναπαράσταση
● Χρησιμοποιεί σαν βάση το 2
– Better worst case/average case accuracy
● Έξυπνες παραχωρήσεις ανάμεσα σε
– Ταχύτητα, ακρίβεια
– Μνήμη, ευχρηστία
– Υλοποίηση, δυναμικό εύρος
20
IEEE 754 Floating Point
21
Biased Exponent Representation
● Τιμή εκθέτη val(E) = E – Bias
● Για 8 bit
– Τιμές από 0 ... 255
– E =0 ή Ε=255 * ειδικές τιμές
– E =0 ... 254 * κανονική αναπαράσταση
● Bias = 127, val = E-127
– val(E=1) = -126
– val(E=127) = 0
– val(E=254) = +127
22
Παράδειγμα
https://www.slideshare.net/prochwani95/06-floating-point
23
Special Patterns
24
Διακριτοί αριθμοί
Οι αποστάσεις δεν είναι ίσες σε όλες τις κλίμακες !
25
Ακρίβεια κωδικοποίησης
●
Άλλο η ακρίβεια υπολογισμού
και άλλο τα σημαντικά στοιχεία μιας μέτρησης
● Η ακρίβεια είναι στο πλήθος των στοιχείων
(και όχι στο πλήθος των δεκαδικών στοιχείων)
– 32 bit : 7-8 δεκαδικά στοιχεία
– 64 bit : 15-16 δεκαδικά στοιχεία
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
27
Προβλήματα
● Λάθη μετατροπής
● Λάθη στρογγυλοποίησης
● Σταδιακή απώλεια ακρίβειας
https://en.wikipedia.org/wiki/Loss_of_significance
● Συγκρίσεις (machine epsilon)
#define FLT_EPSILON 1.19209290e-7F
#define DBL_EPSILON 2.2204460492503131e-16
● Overflow, underflow
28
Προβλήματα
● Δεν ισχύει η αντιμεταθετικότητα
a*(b*c) ≠ (a*b)*c
●
Δεν ισχύει η προσεταιριστικότητα
a*(b+c) ≠ a*b+a*c
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
30
Ευστάθεια αλγορίθμων
Το πρώτο μου πρόγραμμα σε BASIC
Δεν ήταν σωστό !!
31
Που είναι το λάθος ;
●
Μια από τις 2 λύσεις έχει πρόβλημα αστάθειας
– Ειδικά αν 4αγ << β2 και τα πρόσημα είναι ίδια.
– Αφαίρεση “ίδιων” αριθμών → απώλεια σημαντικών στοιχείων
– Σύνηθες πρόβλημα στις ρίζες των πολυωνύμων
https://en.wikipedia.org/wiki/Loss_of_significance
Catastrophic
cancellation
32
Η λύση της δευτεροβάθμιας
Extra Bonus :
●
Να κάνω το a=1.0
●
Ο υπολογισμός της διακρίνουσας θα πρέπει να γίνει με
διπλάσια ακρίβεια
● Fused multiply-add (fmadd) σε πολλά DSP chips
33
Ευστάθεια προβλημάτων
34
Βελτίωση μαθηματικού αλγορίθμου
● Σε κάποια προβλήματα η
ευστάθεια και η ακρίβεια
μπορούν να βελτιωθούν με
χρήση καταλληλότερων
μαθηματικών.
● Κάποια άλλα προβλήματα
είναι από την φύση τους
ασταθή και απαιτούν
προσοχή.
Ελκυστής του Λορενζ
Lorenz Attractor
35
Πρακτικά θέματα
● Ποτέ δεν ελέγχουμε για ισότητα
fabs(a - b) <= FLT_EPSILON
fabs(a - b) <= epsilon * max(fabs(a), fabs(b))
● Προσοχή στις προσθέσεις αφαιρέσεις
– Αν ο ένας αριθμός είναι μικρός και ο άλλος μεγάλος
● Μαθαίνουμε την τυπική βιβλιοθήκη
● Προσοχή στα NaN, Inf
● Ψάχνουμε για τον σωστό αλγόριθμο
– Συμβουλευόμαστε ένα ειδικευμένο μαθηματικό
– Χρησιμοποιούμε καλές μαθηματικές βιβλιοθήκες
36
Συμπέρασμα
● Τα μαθηματικά είναι συνεχή και άπειρα
● Τα υπολογιστικά μαθηματικά
είναι διακριτά και πεπερασμένα
– Οι αριθμοί δεν μπορεί να είναι
αυθαίρετα μεγάλοι η μικροί
– Υπάρχουν κενά μεταξύ τους
● Οι υπολογιστές δεν κάνουν
“σωστούς” υπολογισμούς
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%
38
Δημιουργία
Doom: Fast Inverse Square Root
https://en.wikipedia.org/wiki/Fast_inverse_square_root
John Carmack
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
40
Για περισσότερα
● Wikipedia
https://en.wikipedia.org/wiki/Floating-point_arithmetic
● Floating-Point Design with Vivado HLS
● Nvidia Cuda
http://docs.nvidia.com/cuda/floating-point/index.html
● fast.ai course: Computational Linear Algebra
http://www.fast.ai/2017/07/17/num-lin-alg/
41
Ερωτήσεις

More Related Content

Similar to Why computers can' compute

Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011
Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011
Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011Theodoros Leftheroudis
 
Hacking on Mesa 3D (FOSSCOMM 2017)
Hacking on Mesa 3D (FOSSCOMM 2017)Hacking on Mesa 3D (FOSSCOMM 2017)
Hacking on Mesa 3D (FOSSCOMM 2017)Igalia
 
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...Theodoros Leftheroudis
 
Εργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές Arduino
Εργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές ArduinoΕργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές Arduino
Εργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές ArduinoIraklis Markelis
 
ΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥ
ΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥ
ΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥlampriss
 
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο Μικροϋπολογιστών
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο ΜικροϋπολογιστώνΣυστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο Μικροϋπολογιστών
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο ΜικροϋπολογιστώνTheodoros Leftheroudis
 
ECDL Θεωρία Σημειώσεις 1/7
ECDL Θεωρία Σημειώσεις 1/7ECDL Θεωρία Σημειώσεις 1/7
ECDL Θεωρία Σημειώσεις 1/7Michael Ntallas
 
Presentation laboratory automatic control ii 2018
Presentation laboratory automatic control ii  2018Presentation laboratory automatic control ii  2018
Presentation laboratory automatic control ii 2018Manolis Doudounakis
 
Presentation labarotary automatic control ii 2018
Presentation labarotary automatic control ii  2018Presentation labarotary automatic control ii  2018
Presentation labarotary automatic control ii 2018Manolis Doudounakis
 
Τεχνολογικά Νέα - Τεύχος 6
Τεχνολογικά Νέα - Τεύχος 6Τεχνολογικά Νέα - Τεύχος 6
Τεχνολογικά Νέα - Τεύχος 6ΙΕΚ ΔΕΛΤΑ
 
1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdf
1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdf1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdf
1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdfGeorgios22
 
υπολογιστες θωμας παναγιωτης-θοδωρης
υπολογιστες  θωμας παναγιωτης-θοδωρηςυπολογιστες  θωμας παναγιωτης-θοδωρης
υπολογιστες θωμας παναγιωτης-θοδωρηςrenablatz
 
Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA
Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDAΣύντομη εισαγωγή στην τεχνολογία GPU και την CUDA
Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDAKostas Diamantaras
 
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ CC++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ CDimitris Psounis
 
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα Ψηφιακών
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα ΨηφιακώνΤεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα Ψηφιακών
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα ΨηφιακώνTheodoros Leftheroudis
 
Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α - Δίκτυα Υπολο...
Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α -  Δίκτυα Υπολο...Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α -  Δίκτυα Υπολο...
Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α - Δίκτυα Υπολο...Nickos Nickolopoulos
 
Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...
Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...
Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...Theodoros Leftheroudis
 
20111004 prodiagrafes pc_dynato
20111004 prodiagrafes pc_dynato20111004 prodiagrafes pc_dynato
20111004 prodiagrafes pc_dynatoitdevdamt
 

Similar to Why computers can' compute (20)

Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011
Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011
Θέματα Πανελλαδικών Συστημάτων Ψηφιακών Ηλεκτρονικών 2011
 
Hacking on Mesa 3D (FOSSCOMM 2017)
Hacking on Mesa 3D (FOSSCOMM 2017)Hacking on Mesa 3D (FOSSCOMM 2017)
Hacking on Mesa 3D (FOSSCOMM 2017)
 
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για τα Συστήματα Ψηφιακών του Τομέα ...
 
Εργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές Arduino
Εργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές ArduinoΕργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές Arduino
Εργαστήριο STEM - Αυτοματισμοί κυκλωμάτων και μικροελεγκτές Arduino
 
ΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥ
ΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥ
ΣΥΝΘΕΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΟΥ
 
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο Μικροϋπολογιστών
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο ΜικροϋπολογιστώνΣυστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο Μικροϋπολογιστών
Συστήματα Ψηφιακών Ηλεκτρονικών Θεωρία ΚΕΦ (3) Βιβλίο Μικροϋπολογιστών
 
ΠΛΗ31 ΤΕΣΤ 15
ΠΛΗ31 ΤΕΣΤ 15ΠΛΗ31 ΤΕΣΤ 15
ΠΛΗ31 ΤΕΣΤ 15
 
ECDL Θεωρία Σημειώσεις 1/7
ECDL Θεωρία Σημειώσεις 1/7ECDL Θεωρία Σημειώσεις 1/7
ECDL Θεωρία Σημειώσεις 1/7
 
Presentation laboratory automatic control ii 2018
Presentation laboratory automatic control ii  2018Presentation laboratory automatic control ii  2018
Presentation laboratory automatic control ii 2018
 
Presentation labarotary automatic control ii 2018
Presentation labarotary automatic control ii  2018Presentation labarotary automatic control ii  2018
Presentation labarotary automatic control ii 2018
 
Τεχνολογικά Νέα - Τεύχος 6
Τεχνολογικά Νέα - Τεύχος 6Τεχνολογικά Νέα - Τεύχος 6
Τεχνολογικά Νέα - Τεύχος 6
 
1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdf
1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdf1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdf
1.6 - PythonMOOC-2022-Ε1.6._Προβλήματα.pdf
 
υπολογιστες θωμας παναγιωτης-θοδωρης
υπολογιστες  θωμας παναγιωτης-θοδωρηςυπολογιστες  θωμας παναγιωτης-θοδωρης
υπολογιστες θωμας παναγιωτης-θοδωρης
 
Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA
Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDAΣύντομη εισαγωγή στην τεχνολογία GPU και την CUDA
Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA
 
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ CC++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
 
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα Ψηφιακών
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα ΨηφιακώνΤεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα Ψηφιακών
Τεστ προσομοίωσης Πανελλαδικών Εξετάσεων για το μάθημα Συστήματα Ψηφιακών
 
Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α - Δίκτυα Υπολο...
Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α -  Δίκτυα Υπολο...Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α -  Δίκτυα Υπολο...
Θέματα Πανελλαδικών Εξετάσεων 2014 - Ημερησίων ΕΠΑΛ – Ομάδα Α - Δίκτυα Υπολο...
 
Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...
Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...
Απαντήσεις ερωτήσεων και ασκήσεων του βιβλίου του μαθήματος Αυτοματισμοί και ...
 
Labnotes 2922
Labnotes 2922Labnotes 2922
Labnotes 2922
 
20111004 prodiagrafes pc_dynato
20111004 prodiagrafes pc_dynato20111004 prodiagrafes pc_dynato
20111004 prodiagrafes pc_dynato
 

More from jtsagata

Advanced Notes on Pointers
Advanced Notes on PointersAdvanced Notes on Pointers
Advanced Notes on Pointersjtsagata
 
GPGPU Computation
GPGPU ComputationGPGPU Computation
GPGPU Computationjtsagata
 
Eισαγωγή στο TDD
Eισαγωγή στο TDDEισαγωγή στο TDD
Eισαγωγή στο TDDjtsagata
 
Παιγνίδια με Πίνακες και Δείκτες
Παιγνίδια με Πίνακες και ΔείκτεςΠαιγνίδια με Πίνακες και Δείκτες
Παιγνίδια με Πίνακες και Δείκτεςjtsagata
 
Linux and C
Linux and CLinux and C
Linux and Cjtsagata
 
Greek utf8
Greek utf8Greek utf8
Greek utf8jtsagata
 
Function pointers in C
Function pointers in CFunction pointers in C
Function pointers in Cjtsagata
 
Τι είναι υπολογισμός
Τι είναι υπολογισμόςΤι είναι υπολογισμός
Τι είναι υπολογισμόςjtsagata
 
Η Τέχνη του TeX/LaTeX
Η Τέχνη του TeX/LaTeXΗ Τέχνη του TeX/LaTeX
Η Τέχνη του TeX/LaTeXjtsagata
 
Unikernels
UnikernelsUnikernels
Unikernelsjtsagata
 
FPGA on the Cloud
FPGA on the Cloud FPGA on the Cloud
FPGA on the Cloud jtsagata
 
Evolutionary keyboard Layout
Evolutionary keyboard LayoutEvolutionary keyboard Layout
Evolutionary keyboard Layoutjtsagata
 
Το εργαλείο
Το εργαλείοΤο εργαλείο
Το εργαλείοjtsagata
 

More from jtsagata (16)

Advanced Notes on Pointers
Advanced Notes on PointersAdvanced Notes on Pointers
Advanced Notes on Pointers
 
C locales
C localesC locales
C locales
 
GPGPU Computation
GPGPU ComputationGPGPU Computation
GPGPU Computation
 
Eισαγωγή στο TDD
Eισαγωγή στο TDDEισαγωγή στο TDD
Eισαγωγή στο TDD
 
Παιγνίδια με Πίνακες και Δείκτες
Παιγνίδια με Πίνακες και ΔείκτεςΠαιγνίδια με Πίνακες και Δείκτες
Παιγνίδια με Πίνακες και Δείκτες
 
Linux and C
Linux and CLinux and C
Linux and C
 
Git intro
Git introGit intro
Git intro
 
Greek utf8
Greek utf8Greek utf8
Greek utf8
 
Function pointers in C
Function pointers in CFunction pointers in C
Function pointers in C
 
Τι είναι υπολογισμός
Τι είναι υπολογισμόςΤι είναι υπολογισμός
Τι είναι υπολογισμός
 
Η Τέχνη του TeX/LaTeX
Η Τέχνη του TeX/LaTeXΗ Τέχνη του TeX/LaTeX
Η Τέχνη του TeX/LaTeX
 
Unikernels
UnikernelsUnikernels
Unikernels
 
FPGA on the Cloud
FPGA on the Cloud FPGA on the Cloud
FPGA on the Cloud
 
Evolutionary keyboard Layout
Evolutionary keyboard LayoutEvolutionary keyboard Layout
Evolutionary keyboard Layout
 
Omilia
OmiliaOmilia
Omilia
 
Το εργαλείο
Το εργαλείοΤο εργαλείο
Το εργαλείο
 

Why computers can' compute

  • 1. Computers can’t compute Μια εισαγωγή στο IEEE 754 Τσαγκατάκης Γιάννης jtsagata@gmail.com Msc in Informatics & MultimediaMsc in Informatics & Multimedia Department of Informatics Engineering TEI of Crete
  • 2. 2 Ας γράψουμε λίγη Python Τι θα κάνει ο παρακάτω κώδικας;
  • 3. 3 Ας γράψουμε λίγη Python Εύκολο ! 0.1, 0.2, 0.4, 0.8, 0.6, 0.2, 0.4, 0.8, 0.6, 0.2, 0.4, 0.8, 0.6, ...
  • 7. 7 Διερεύνση Τι πραγματικά κάνει ο παραπάνω κώδικας!
  • 10. 10 Γιατί; fsum: 1.0000001192092895508 fprod: 1 dprod: 1 Intel(R) Core(TM) i5-4300U CPU Γιατί; fsum: 1.0000001192092895508 fprod: 1 dprod: 1.0000000149011611938 XilinX fpga Γιατί;Γιατί; No constexpr optimizations
  • 12. 12 Η επιστημονική αναπαράσταση Υπολογιστής μΑριθ ός 9.46E7 9.46 x 107 9.46 x 10,000,000 94,600,000 9.46E­3 9.46 x 10­3 9.46 x 0.001 0.009,460 9.46E2 9.46 x 102 9.46 x 100 9.46E2 3.51E­5 3.51 x 10­5 3.51 x 0.0001 0.0000351 3.51E­15 3.51 x 10­15 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$
  • 16. 16 Στην πράξη C/Java Τι τύπο θα χρησιμοποιήσεις για την τιμή ενός προϊόντος;
  • 17. 17 Πέραν των ακεραίων ● Αριθμοί σταθερής υποδιαστολής ● Rational Arithmetic ● Binary-coded decimal (BCD) ● Logarithmic number Systems (LMS) ● Bignum (arbitrary precision) ● Computer algebra systems ● Αριθμοί κινητής υποδιαστολής DSP ΙΕΕΕ 754 22/7
  • 18. 18 Ιστορία ● ~1600 πχ. Βαβυλώνα. 60-δικό σύστημα αρίθμησης ● 1630 Λογαριθμικός κανόνας. Δεκαδική βάση. ● 1914 Leonardo Torres y Quevedo, Babbage's Analytical Engine ● 1941 Konrad Zuse's Z3, δυαδική βάση, 14+7+1 ● 1985 William Kahan, Πρώτο IEEE 754 ● 2008 IEEE 754r (gcc: __float80,__float128,_Decimal32,_Decimal64,_Decimal128,__fp16 (arm) )
  • 19. 19 IEEE 754 ● Η ποιο χρησιμοποιούμενη αναπαράσταση ● Χρησιμοποιεί σαν βάση το 2 – Better worst case/average case accuracy ● Έξυπνες παραχωρήσεις ανάμεσα σε – Ταχύτητα, ακρίβεια – Μνήμη, ευχρηστία – Υλοποίηση, δυναμικό εύρος
  • 21. 21 Biased Exponent Representation ● Τιμή εκθέτη val(E) = E – Bias ● Για 8 bit – Τιμές από 0 ... 255 – E =0 ή Ε=255 * ειδικές τιμές – E =0 ... 254 * κανονική αναπαράσταση ● Bias = 127, val = E-127 – val(E=1) = -126 – val(E=127) = 0 – val(E=254) = +127
  • 24. 24 Διακριτοί αριθμοί Οι αποστάσεις δεν είναι ίσες σε όλες τις κλίμακες !
  • 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
  • 27. 27 Προβλήματα ● Λάθη μετατροπής ● Λάθη στρογγυλοποίησης ● Σταδιακή απώλεια ακρίβειας https://en.wikipedia.org/wiki/Loss_of_significance ● Συγκρίσεις (machine epsilon) #define FLT_EPSILON 1.19209290e-7F #define DBL_EPSILON 2.2204460492503131e-16 ● Overflow, underflow
  • 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
  • 30. 30 Ευστάθεια αλγορίθμων Το πρώτο μου πρόγραμμα σε BASIC Δεν ήταν σωστό !!
  • 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%
  • 38. 38 Δημιουργία Doom: Fast Inverse Square Root https://en.wikipedia.org/wiki/Fast_inverse_square_root John Carmack
  • 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
  • 40. 40 Για περισσότερα ● Wikipedia https://en.wikipedia.org/wiki/Floating-point_arithmetic ● Floating-Point Design with Vivado HLS ● Nvidia Cuda http://docs.nvidia.com/cuda/floating-point/index.html ● fast.ai course: Computational Linear Algebra http://www.fast.ai/2017/07/17/num-lin-alg/