Erreur de calcul en php

Résolu/Fermé
Signaler
Messages postés
2
Date d'inscription
dimanche 12 décembre 2010
Statut
Membre
Dernière intervention
13 décembre 2010
-
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
-
Bonjour,
Je suis tombé sur cette erreur de calcul par PHP :
[code]<?php

$a = 0.7;
$b = 7;
$c = $a * $b;
$d = 4.9;
print $d - $c;

?>[/code]
et le résultat (qui devrait être 0 pour ceux qui n'auraient pas suivi)
8.881784197E-16

étonnant non ?
Quelqu'un pourrait-il m'expliquer cela ?


3 réponses

Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
394
Des nombres à virgules comme 0,1 et 0,7 n'ont pas une représentation exacte dans le langage de l'ordinateur, i. e. en base 2 (même s'ils sont tout beau et tout rond en base 10).

Tout cela veut dire qu'en fait, ta variable $c est plutôt le résultat de quelque chose comme:

$c = 0.699999999999999999... * 7;
$c = 4,899999999999999999...
$d = 4.9

0.00000000000000008881784197 = $d - $c
= 8.881784197E-16

Echo "Lima Mike Alfa";
Messages postés
2
Date d'inscription
dimanche 12 décembre 2010
Statut
Membre
Dernière intervention
13 décembre 2010

merci Doctor C
Je me doutais bien d'un truc comme ça.
Comment écrit-t'on les décimales en base 2 ?
comme 0.7
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
394
Des décimales en binaire, c'est pas super simple.
J'ai pas trop envie de tenter de l'expliquer (surtout que je n'y comprend pas tous les détails).

Voici l'explication de wikipedia: https://fr.wikipedia.org/wiki/IEEE_754