SlideShare una empresa de Scribd logo
1 de 30
Shaker technologies Javascript-IEEE754 version 1.1 
IEEE754 
Manipulation des 
nombres flottants : 
exemples avec 
Javascript
Shaker technologies Javascript-IEEE754 version 1.1 
Human talker 
Mickaël Ruau : 
• consultant en qualité logicielle 
(forges logicielles) 
• spécialiste de l’informatique 
médicale (norme DICOM) 
• formateur à l’AFPA d’Angers
Shaker technologies Javascript-IEEE754 version 1.1 
Références 
http://blog.oaxoa.com/2008/03/22/weird-math-aka-ieee-754- 
double-precision-floating-point-number-sukcs/ 
http://grouper.ieee.org/groups/754/faq.html 
http://www.haypocalc.com/wiki/Standards_IEEE_754_et_854 
http://floating-point-gui.de/languages/javascript/ 
http://www.ecmascript.org/ 
Standard ECMA-262 3rd Edition - December 1999 
ECMA-262 5.1 Edition - June 2011
Shaker technologies Javascript-IEEE754 version 1.1 
Disclaimer 
Le but est de sensibiliser 
aux problèmes liés aux 
calculs informatiques, 
notamment en matière 
financière (comptabilité, 
paie, ecommerce...). 
Je ne suis pas 
mathématicien. 
Je n’ai pas écrit la norme 
IEEE754, je ne la connais 
pas par coeur!
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1
La minute nécessaire 
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1 
Etonnant, non?! 
console.log(0.1+0.2); //0.30000000000000004
Shaker technologies Javascript-IEEE754 version 1.1 
Etonnant, non?! (suite) 
console.log(0.1*0.2); //0.020000000000000004
Shaker technologies Javascript-IEEE754 version 1.1 
Etonnant, non?! (re-suite) 
console.log(0.11/0.10); //1.0999999999999999
Shaker technologies Javascript-IEEE754 version 1.1 
Etonnant, non?! (fin) 
console.log(0.3 - 0.2 ); //0.09999999999999998
Explication 
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1 
La cancellation 
http://fr.wikipedia.org/wiki/Virgule_flottante#Pr.C3.A9cautions_d.27emploi 
Les calculs en virgule flottante (...) présentent divers 
désagréments, notamment leur précision limitée, qui se 
traduit par des arrondis. (...) 
En particulier, la soustraction de deux nombres très proches 
provoque une grande perte de précision relative : on parle de 
« cancellation ».
Shaker technologies Javascript-IEEE754 version 1.1 
Pourquoi 0.1 n’est pas 0.1? 
http://www.haypocalc.com/wiki/Standards_IEEE_754_et_854 
En gros, on stocke les nombres sous la forme : 
(signe, mantisse, exposant) 
ce qui donne x = signe * mantisse * (2 ^ exposant). 
Le signe vaut +1 ou -1, la mantisse est un nombre réel 
tel que 1.0 <= mantisse < 2.0, 
et l'exposant est une valeur entière. 
Bien sûr, l'ensemble est codé en binaire !
Shaker technologies Javascript-IEEE754 version 1.1 
Exemples de format de stockage 
 Le nombre 2 est stocké (+1, 1, 1), 
c'est-à-dire : 2 = (+1) * 1 * (2 ^ 1). 
 Le nombre 3 est stocké (+1, 1.5, 1) : 
3 = (+1) * 1.5 * (2 ^ 1). 
 Le nombre 10 est stocké (+1, 1.25, 3) : 
10 = (+1) * 1.25 * 2^3.
Shaker technologies Javascript-IEEE754 version 1.1 
Personne ne coule? 
Vers l’infini et au-delà avec les flottants…
Shaker technologies Javascript-IEEE754 version 1.1 
Passé les bornes, y’a plus de limite! 
console.log(1.00000000000000009);// affiche 1 
var n1 = 123456789012345672; 
console.log(n1); // affiche 123456789012345660 
var n2 = 123456789012345673; 
console.log(n2); // affiche 123456789012345680
Shaker technologies Javascript-IEEE754 version 1.1 
Mini, mini, mini 
console.log(1.00000000000000009);// affiche 1 
console.log(0.0000000000000000000000000000000000000 
000000000000000000000000000000000000000000000000 
000000000000000000000000000000000000000000000000 
000000000000000000000000000000000000000000000000 
000000000000000000000000000000000000000000000000 
000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000001); 
// affiche 0
Shaker technologies Javascript-IEEE754 version 1.1 
" Il faut une infinie patience pour attendre toujours ce 
qui n'arrive jamais. " (PIERRE DAC) 
console.log(999999999999999999999999999999999999999 
999999999999999999999999999999999999999999999999 
999999999999999999999999999999999999999999999999 
999999999999999999999999999999999999999999999999 
999999999999999999999999999999999999999999999999 
999999999999999999999999999999999999999999999999 
999999999999999999999999999999); 
//affiche Infinity
Shaker technologies Javascript-IEEE754 version 1.1 
" Il faut toujours prendre le maximum de risques avec le 
maximum de précautions. " Rudyard Kipling 
console.log(3+999999999999999); 
//affiche 1000000000000002 
console.log(3+9999999999999999); 
//affiche 1000000000000004 
console.log(3+99999999999999999); 
//affiche 100000000000000000 
console.log(2+99999999999999999); 
//affiche 100000000000000000
Explication 
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1 
IEEE 754 overflow 
http://fr.wikipedia.org/wiki/Virgule_flottante 
La plage d'exposants est limitée : 
• « overflows » lorsque le résultat d'une opération est plus 
grand que la plus grande valeur représentable 
• « underflows » lorsqu'un résultat est plus petit, en valeur 
absolue, que le plus petit flottant normalisé positif 
• puis des résultats n'ayant plus aucun sens.
Shaker technologies Javascript-IEEE754 version 1.1 
Quelles solutions? 
photo : http://blog.megdesk.com/computer-engineer-barbie-revised/
Shaker technologies Javascript-IEEE754 version 1.1 
Number() = IEEE 64 bit 
JavaScript is dynamically typed and will often convert 
implicitly between strings and floating-point numbers (which 
are IEEE 64 bit values). 
To force a variable to floating-point, use the global 
parseFloat() function. 
var num = parseFloat("3.5");
Shaker technologies Javascript-IEEE754 version 1.1 
https://github.com/dtrebbien/BigDecimal.js 
Decimal Types 
The best decimal type for JavaScript seems to be a port of 
Java’s BigDecimal class, which also supports rounding 
modes: 
var a = new BigDecimal("0.01"); 
var b = new BigDecimal("0.02"); 
var c = a.add(b); // 0.03 
var d = c.setScale(1, BigDecimal.prototype.ROUND_HALF_UP);
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1
Shaker technologies Javascript-IEEE754 version 1.1 
@HeforShe 
Dedicated to 
Pauline, 
Stéphanie, 
Sylvie, 
Mum… 
With love and kisses. 
You girls rock in IT! 
Credits : 
Photo : http://violasong.com/2010/03/what-a-computer-engineer-looks-like 
https://computer-engineer-barbie.herokuapp.com 
Cette présentation constitue une parodie au sens de l’article L.122-5 
du Code de la Propriété Intellectuelle. 
This non-commercial transformative work constitutes fair use 
under Section 107 of the U.S. copyright act. 
Use of copyrighted material is necessary 
for the purpose of criticism and education, the images are only 
at the resolution necessary for this purpose, 
and this remix is clearly marked to avoid confusion with the original.

Más contenido relacionado

La actualidad más candente

Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
mis
mismis
misISIG
 
Vbisigk
VbisigkVbisigk
VbisigkISIG
 
Visual studio
Visual studioVisual studio
Visual studioISIG
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Aurélien Regat-Barrel
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !ochafik
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)ISIG
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1ISIG
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipseISIG
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
SdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionSdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionAlexandru Radovici
 
De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()Lorraine JUG
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMALoic Yon
 

La actualidad más candente (20)

Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
mis
mismis
mis
 
Vbisigk
VbisigkVbisigk
Vbisigk
 
Visual studio
Visual studioVisual studio
Visual studio
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
SdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionSdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de execution
 
The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 

Destacado

SONIDO DE DIAPOSITIVAS
SONIDO DE DIAPOSITIVASSONIDO DE DIAPOSITIVAS
SONIDO DE DIAPOSITIVASGuiller Vall
 
Extrait du livre "LES DIFFICULTES DE ZOE"
Extrait du livre "LES DIFFICULTES DE ZOE"Extrait du livre "LES DIFFICULTES DE ZOE"
Extrait du livre "LES DIFFICULTES DE ZOE"Hop'Toys
 
La Terra Chaleco 7 A 5 Y 22
La Terra Chaleco 7 A 5 Y 22La Terra Chaleco 7 A 5 Y 22
La Terra Chaleco 7 A 5 Y 22guest768b206
 
Desarrollo del modelo 1 a 1
Desarrollo del modelo 1 a 1Desarrollo del modelo 1 a 1
Desarrollo del modelo 1 a 1Cacho Mazzoni
 
Nouveautés ca 1.4 cbbd 15 mai
Nouveautés ca 1.4 cbbd 15 maiNouveautés ca 1.4 cbbd 15 mai
Nouveautés ca 1.4 cbbd 15 maiGautier Michelin
 
Carpeta De Michoacan Mayo 2009
Carpeta De Michoacan   Mayo 2009Carpeta De Michoacan   Mayo 2009
Carpeta De Michoacan Mayo 2009Alex Zepeda
 
Presentacion Electronica
Presentacion ElectronicaPresentacion Electronica
Presentacion ElectronicaCamilo Forero
 
5 ideas claves en ecommerce
5 ideas claves en ecommerce5 ideas claves en ecommerce
5 ideas claves en ecommerceLuis Chaquea
 
Sitios para perderse
Sitios para perderseSitios para perderse
Sitios para perdersesupersrivera
 
Trabajo de fiesta del Corpus Christi
Trabajo de fiesta del Corpus ChristiTrabajo de fiesta del Corpus Christi
Trabajo de fiesta del Corpus ChristiPatasin
 
SWA-INFO-on-Buzzer-FR - Article in french
SWA-INFO-on-Buzzer-FR - Article in frenchSWA-INFO-on-Buzzer-FR - Article in french
SWA-INFO-on-Buzzer-FR - Article in frenchMark Leinemann
 
Problemas resueltoscap4
Problemas resueltoscap4Problemas resueltoscap4
Problemas resueltoscap4klmir2000
 

Destacado (20)

Photos historiques
Photos historiquesPhotos historiques
Photos historiques
 
SONIDO DE DIAPOSITIVAS
SONIDO DE DIAPOSITIVASSONIDO DE DIAPOSITIVAS
SONIDO DE DIAPOSITIVAS
 
Metacognitivas
MetacognitivasMetacognitivas
Metacognitivas
 
Extrait du livre "LES DIFFICULTES DE ZOE"
Extrait du livre "LES DIFFICULTES DE ZOE"Extrait du livre "LES DIFFICULTES DE ZOE"
Extrait du livre "LES DIFFICULTES DE ZOE"
 
Cómo poner tu tienda online
Cómo poner tu tienda onlineCómo poner tu tienda online
Cómo poner tu tienda online
 
Expo metodologia
Expo metodologiaExpo metodologia
Expo metodologia
 
La Terra Chaleco 7 A 5 Y 22
La Terra Chaleco 7 A 5 Y 22La Terra Chaleco 7 A 5 Y 22
La Terra Chaleco 7 A 5 Y 22
 
Desarrollo del modelo 1 a 1
Desarrollo del modelo 1 a 1Desarrollo del modelo 1 a 1
Desarrollo del modelo 1 a 1
 
Nouveautés ca 1.4 cbbd 15 mai
Nouveautés ca 1.4 cbbd 15 maiNouveautés ca 1.4 cbbd 15 mai
Nouveautés ca 1.4 cbbd 15 mai
 
practica
practicapractica
practica
 
Carpeta De Michoacan Mayo 2009
Carpeta De Michoacan   Mayo 2009Carpeta De Michoacan   Mayo 2009
Carpeta De Michoacan Mayo 2009
 
Presentacion Electronica
Presentacion ElectronicaPresentacion Electronica
Presentacion Electronica
 
5 ideas claves en ecommerce
5 ideas claves en ecommerce5 ideas claves en ecommerce
5 ideas claves en ecommerce
 
Sitios para perderse
Sitios para perderseSitios para perderse
Sitios para perderse
 
Liderazgo
LiderazgoLiderazgo
Liderazgo
 
Kalos
KalosKalos
Kalos
 
Trabajo de fiesta del Corpus Christi
Trabajo de fiesta del Corpus ChristiTrabajo de fiesta del Corpus Christi
Trabajo de fiesta del Corpus Christi
 
SWA-INFO-on-Buzzer-FR - Article in french
SWA-INFO-on-Buzzer-FR - Article in frenchSWA-INFO-on-Buzzer-FR - Article in french
SWA-INFO-on-Buzzer-FR - Article in french
 
Problemas resueltoscap4
Problemas resueltoscap4Problemas resueltoscap4
Problemas resueltoscap4
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 

Similar a Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?

IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxRuau Mickael
 
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxRuau Mickael
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?Ruau Mickael
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCDamien Seguy
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetupSamir Rouabhi
 
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018Carles Sistare
 
gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !David Caramelo
 
Formation JPA Java persistence API
Formation JPA Java persistence APIFormation JPA Java persistence API
Formation JPA Java persistence APIThibault Cuvillier
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystMathieu Goeminne
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024YounesOuladSayad1
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceOCTO Technology
 

Similar a Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux? (20)

IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
 
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
 
gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !
 
Php seance1
Php seance1Php seance1
Php seance1
 
Formation JPA Java persistence API
Formation JPA Java persistence APIFormation JPA Java persistence API
Formation JPA Java persistence API
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
 
The future of JavaScript
The future of JavaScriptThe future of JavaScript
The future of JavaScript
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 

Más de Ruau Mickael

Panorama de méthodes agiles
Panorama de méthodes agilesPanorama de méthodes agiles
Panorama de méthodes agilesRuau Mickael
 
Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Ruau Mickael
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 
Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Ruau Mickael
 
Google Design Sprints v1-1
Google Design Sprints v1-1Google Design Sprints v1-1
Google Design Sprints v1-1Ruau Mickael
 
Value Proposition Design
Value Proposition DesignValue Proposition Design
Value Proposition DesignRuau Mickael
 
L'investissement proportionnel en formation
L'investissement proportionnel en formationL'investissement proportionnel en formation
L'investissement proportionnel en formationRuau Mickael
 
Pour des données fiables
Pour des données fiablesPour des données fiables
Pour des données fiablesRuau Mickael
 
Like Me I'm Famous !
Like Me I'm Famous !Like Me I'm Famous !
Like Me I'm Famous !Ruau Mickael
 
Animer une formation : les bases
Animer une formation : les basesAnimer une formation : les bases
Animer une formation : les basesRuau Mickael
 
Qui a peur des estimations ?
Qui a peur des estimations ?Qui a peur des estimations ?
Qui a peur des estimations ?Ruau Mickael
 
Consignes épreuve de codage
Consignes épreuve de codageConsignes épreuve de codage
Consignes épreuve de codageRuau Mickael
 
Horreurs et recrutement
Horreurs et recrutementHorreurs et recrutement
Horreurs et recrutementRuau Mickael
 
Quelle(s) stratégie(s) de développement dans un monde en mouvement?
Quelle(s) stratégie(s) de développement dans un monde en mouvement?Quelle(s) stratégie(s) de développement dans un monde en mouvement?
Quelle(s) stratégie(s) de développement dans un monde en mouvement?Ruau Mickael
 
Sycfi - Twitter pour les formateurs v.1.1
Sycfi - Twitter pour les formateurs v.1.1Sycfi - Twitter pour les formateurs v.1.1
Sycfi - Twitter pour les formateurs v.1.1Ruau Mickael
 

Más de Ruau Mickael (19)

Panorama de méthodes agiles
Panorama de méthodes agilesPanorama de méthodes agiles
Panorama de méthodes agiles
 
Green web
Green webGreen web
Green web
 
Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?Javascript objet : que fait ce code ?
Javascript objet : que fait ce code ?
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?Javascript - Tableaux : que fait ce code ?
Javascript - Tableaux : que fait ce code ?
 
Google Design Sprints v1-1
Google Design Sprints v1-1Google Design Sprints v1-1
Google Design Sprints v1-1
 
Value Proposition Design
Value Proposition DesignValue Proposition Design
Value Proposition Design
 
L'investissement proportionnel en formation
L'investissement proportionnel en formationL'investissement proportionnel en formation
L'investissement proportionnel en formation
 
Pour des données fiables
Pour des données fiablesPour des données fiables
Pour des données fiables
 
Besoin d'aide ?
Besoin d'aide ?Besoin d'aide ?
Besoin d'aide ?
 
Like Me I'm Famous !
Like Me I'm Famous !Like Me I'm Famous !
Like Me I'm Famous !
 
Animer une formation : les bases
Animer une formation : les basesAnimer une formation : les bases
Animer une formation : les bases
 
Protocamp
ProtocampProtocamp
Protocamp
 
Qui a peur des estimations ?
Qui a peur des estimations ?Qui a peur des estimations ?
Qui a peur des estimations ?
 
hacking learning
hacking learninghacking learning
hacking learning
 
Consignes épreuve de codage
Consignes épreuve de codageConsignes épreuve de codage
Consignes épreuve de codage
 
Horreurs et recrutement
Horreurs et recrutementHorreurs et recrutement
Horreurs et recrutement
 
Quelle(s) stratégie(s) de développement dans un monde en mouvement?
Quelle(s) stratégie(s) de développement dans un monde en mouvement?Quelle(s) stratégie(s) de développement dans un monde en mouvement?
Quelle(s) stratégie(s) de développement dans un monde en mouvement?
 
Sycfi - Twitter pour les formateurs v.1.1
Sycfi - Twitter pour les formateurs v.1.1Sycfi - Twitter pour les formateurs v.1.1
Sycfi - Twitter pour les formateurs v.1.1
 

Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?

  • 1. Shaker technologies Javascript-IEEE754 version 1.1 IEEE754 Manipulation des nombres flottants : exemples avec Javascript
  • 2. Shaker technologies Javascript-IEEE754 version 1.1 Human talker Mickaël Ruau : • consultant en qualité logicielle (forges logicielles) • spécialiste de l’informatique médicale (norme DICOM) • formateur à l’AFPA d’Angers
  • 3. Shaker technologies Javascript-IEEE754 version 1.1 Références http://blog.oaxoa.com/2008/03/22/weird-math-aka-ieee-754- double-precision-floating-point-number-sukcs/ http://grouper.ieee.org/groups/754/faq.html http://www.haypocalc.com/wiki/Standards_IEEE_754_et_854 http://floating-point-gui.de/languages/javascript/ http://www.ecmascript.org/ Standard ECMA-262 3rd Edition - December 1999 ECMA-262 5.1 Edition - June 2011
  • 4. Shaker technologies Javascript-IEEE754 version 1.1 Disclaimer Le but est de sensibiliser aux problèmes liés aux calculs informatiques, notamment en matière financière (comptabilité, paie, ecommerce...). Je ne suis pas mathématicien. Je n’ai pas écrit la norme IEEE754, je ne la connais pas par coeur!
  • 9. La minute nécessaire Shaker technologies Javascript-IEEE754 version 1.1
  • 10. Shaker technologies Javascript-IEEE754 version 1.1 Etonnant, non?! console.log(0.1+0.2); //0.30000000000000004
  • 11. Shaker technologies Javascript-IEEE754 version 1.1 Etonnant, non?! (suite) console.log(0.1*0.2); //0.020000000000000004
  • 12. Shaker technologies Javascript-IEEE754 version 1.1 Etonnant, non?! (re-suite) console.log(0.11/0.10); //1.0999999999999999
  • 13. Shaker technologies Javascript-IEEE754 version 1.1 Etonnant, non?! (fin) console.log(0.3 - 0.2 ); //0.09999999999999998
  • 14. Explication Shaker technologies Javascript-IEEE754 version 1.1
  • 15. Shaker technologies Javascript-IEEE754 version 1.1 La cancellation http://fr.wikipedia.org/wiki/Virgule_flottante#Pr.C3.A9cautions_d.27emploi Les calculs en virgule flottante (...) présentent divers désagréments, notamment leur précision limitée, qui se traduit par des arrondis. (...) En particulier, la soustraction de deux nombres très proches provoque une grande perte de précision relative : on parle de « cancellation ».
  • 16. Shaker technologies Javascript-IEEE754 version 1.1 Pourquoi 0.1 n’est pas 0.1? http://www.haypocalc.com/wiki/Standards_IEEE_754_et_854 En gros, on stocke les nombres sous la forme : (signe, mantisse, exposant) ce qui donne x = signe * mantisse * (2 ^ exposant). Le signe vaut +1 ou -1, la mantisse est un nombre réel tel que 1.0 <= mantisse < 2.0, et l'exposant est une valeur entière. Bien sûr, l'ensemble est codé en binaire !
  • 17. Shaker technologies Javascript-IEEE754 version 1.1 Exemples de format de stockage  Le nombre 2 est stocké (+1, 1, 1), c'est-à-dire : 2 = (+1) * 1 * (2 ^ 1).  Le nombre 3 est stocké (+1, 1.5, 1) : 3 = (+1) * 1.5 * (2 ^ 1).  Le nombre 10 est stocké (+1, 1.25, 3) : 10 = (+1) * 1.25 * 2^3.
  • 18. Shaker technologies Javascript-IEEE754 version 1.1 Personne ne coule? Vers l’infini et au-delà avec les flottants…
  • 19. Shaker technologies Javascript-IEEE754 version 1.1 Passé les bornes, y’a plus de limite! console.log(1.00000000000000009);// affiche 1 var n1 = 123456789012345672; console.log(n1); // affiche 123456789012345660 var n2 = 123456789012345673; console.log(n2); // affiche 123456789012345680
  • 20. Shaker technologies Javascript-IEEE754 version 1.1 Mini, mini, mini console.log(1.00000000000000009);// affiche 1 console.log(0.0000000000000000000000000000000000000 000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000001); // affiche 0
  • 21. Shaker technologies Javascript-IEEE754 version 1.1 " Il faut une infinie patience pour attendre toujours ce qui n'arrive jamais. " (PIERRE DAC) console.log(999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999 999999999999999999999999999999); //affiche Infinity
  • 22. Shaker technologies Javascript-IEEE754 version 1.1 " Il faut toujours prendre le maximum de risques avec le maximum de précautions. " Rudyard Kipling console.log(3+999999999999999); //affiche 1000000000000002 console.log(3+9999999999999999); //affiche 1000000000000004 console.log(3+99999999999999999); //affiche 100000000000000000 console.log(2+99999999999999999); //affiche 100000000000000000
  • 23. Explication Shaker technologies Javascript-IEEE754 version 1.1
  • 24. Shaker technologies Javascript-IEEE754 version 1.1 IEEE 754 overflow http://fr.wikipedia.org/wiki/Virgule_flottante La plage d'exposants est limitée : • « overflows » lorsque le résultat d'une opération est plus grand que la plus grande valeur représentable • « underflows » lorsqu'un résultat est plus petit, en valeur absolue, que le plus petit flottant normalisé positif • puis des résultats n'ayant plus aucun sens.
  • 25. Shaker technologies Javascript-IEEE754 version 1.1 Quelles solutions? photo : http://blog.megdesk.com/computer-engineer-barbie-revised/
  • 26. Shaker technologies Javascript-IEEE754 version 1.1 Number() = IEEE 64 bit JavaScript is dynamically typed and will often convert implicitly between strings and floating-point numbers (which are IEEE 64 bit values). To force a variable to floating-point, use the global parseFloat() function. var num = parseFloat("3.5");
  • 27. Shaker technologies Javascript-IEEE754 version 1.1 https://github.com/dtrebbien/BigDecimal.js Decimal Types The best decimal type for JavaScript seems to be a port of Java’s BigDecimal class, which also supports rounding modes: var a = new BigDecimal("0.01"); var b = new BigDecimal("0.02"); var c = a.add(b); // 0.03 var d = c.setScale(1, BigDecimal.prototype.ROUND_HALF_UP);
  • 30. Shaker technologies Javascript-IEEE754 version 1.1 @HeforShe Dedicated to Pauline, Stéphanie, Sylvie, Mum… With love and kisses. You girls rock in IT! Credits : Photo : http://violasong.com/2010/03/what-a-computer-engineer-looks-like https://computer-engineer-barbie.herokuapp.com Cette présentation constitue une parodie au sens de l’article L.122-5 du Code de la Propriété Intellectuelle. This non-commercial transformative work constitutes fair use under Section 107 of the U.S. copyright act. Use of copyrighted material is necessary for the purpose of criticism and education, the images are only at the resolution necessary for this purpose, and this remix is clearly marked to avoid confusion with the original.