Erreur de calcul en php

Résolu/Fermé
hpmousse Messages postés 2 Date d'inscription dimanche 12 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010 - 12 déc. 2010 à 23:57
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 - 13 déc. 2010 à 19:25
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 ?


A voir également:

3 réponses

Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
Modifié par Doctor C le 13/12/2010 à 18:07
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";
0
hpmousse Messages postés 2 Date d'inscription dimanche 12 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010
13 déc. 2010 à 18:30
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
0
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
13 déc. 2010 à 19:25
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
0