Erreur de calcul en php

Résolu
hpmousse Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
Doctor C Messages postés 630 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Doctor C Messages postés 630 Date d'inscription   Statut Membre Dernière intervention   400
     
    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
  2. hpmousse Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. Doctor C Messages postés 630 Date d'inscription   Statut Membre Dernière intervention   400
     
    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