devlop78
Invité n'ayant pas de compte PHPfrance
14 juin 2011, 00:50
C'est marrant. Parce que autant le nombre ne me surprend pas étant donné la méthode de calcul binaire, mais en général quand tu fais un echo le résultat est normal.
En fait, le problème a déjà été soulevé, et il s'avère que l'ordinateur obtient bien 5.0460000000000002629 lorsqu'il fait ton calcul, tout simplement parce que ... enfin voilà. As-tu essayé avec les fonctions mathématiques adaptées ?
Je te conseille de lire
http://php.net/manual/fr/language.types.float.php
Les nombres décimaux ont une précision limitée. Même s'ils dépendent du système, PHP utilise le format de précision des décimaux IEEE 754, qui donnera une erreur maximale relative de l'ordre de 1.11e-16 (dûe aux arrondis)
Quand on regarde ton chiffre, on est sur du environ 10e-16 où commence l'erreur
Ceci peut mener à des résultats confus: par exemple, floor((0.1+0.7)*10) retournera normalement 7 au lieu de 8 attendu, car la représentation interne sera quelque chose comme 7.9999999999999991118....
Au final, moi j'avais, avant de lire ces articles, toujours pensé que les mathématiques étaient ce que faisait de mieux un ordinateur, mais non ^^ Le résultat s'explique mais c'est une histoire de stockage de chiffre avec une puissance, le tout en binaire, et comme le nombre de chiffre est limité, il y a une perte au niveau de la précision.
Mais sérieusement je rigole avec ça, mais tu devrais te tourner vers
http://www.php.net/manual/fr/ref.bc.php