|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : octobre 2011 Messages : 3 ![]() |
bonjour,
si vous analysez ce code, vous conviendrez que le echo n'est exécuté que si la condition du for est vérifiée Code :
avez-vous une explication rationnelle ??? |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() |
Bonjour,
Je t'invite à regarder l'énorme avertissement sur cette page concernant la comparaison de float entre eux. Ensuite ragardes cette page, tu y trouveras toutes les explications concernant la gestion des nombres décimaux en PHP Enfin pour manipuler les nombres décimaux, il faut utiliser BCMath ou les fonctions gmp
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : octobre 2011 Messages : 3 ![]() |
merci pour ton message, mais je n'ai pas trouvé la réponse
ta 1ère page avertit sur le test d'égalité entre décimaux, ce n'est pas ce qui est fait ici ta 2nde page avertit sur la précision des décimaux de l'ordre de 1.11e-16, or 830.88/5=166.176, on n'est pas non plus concerné par ça les fonctions BC Math concernent les nombres de grande taille les fonctions gmp ne sont pas disponibles par défaut d'autres idées ?? |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() ![]() |
Tu n'as pas bien lu :
Citation:
Donc à cause de la propagation des arrondis et de la représentation des décimaux en base 2, tu ne peux arriver à une valeur rationnelle. Elle est obligatoirement irrationnelle en interne. Au mieux, à la dernière comparaison tu auras quelque chose du genre 830.879999999999998 < 830.8799999999999999.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : octobre 2011 Messages : 3 ![]() |
ok ça me convient
ça explique alors pourquoi cette modification corrige le bug merci |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() ![]() |
J'en suis fort aise
Je t'arrête, ce n'est pas un bug. C'est inhérent à la technologie.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#7 |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 3 881 ![]() |
Quelque soit le langage, quelque soit la technologie, le système d'exploitation, le processeur, etc ... on n'utilise pas les nombres à virgule flottante simple (float) ou double (double) précision si on veut une exactitude parfaite des calculs.
Les types float ou double, de part leur constitution, ne peuvent pas représenter la totalité des nombres à virgule. Les nombres non représentés sont arrondi au nombre représentable le plus proche. Si on a besoin de nombre parfaitement exact, il faut utiliser le type Decimal (appelé parfois Curency), mais il n'existe pas dans tous les langages.
__________________
Sevyc64 --- Le partage est notre force NON AU LANGAGE SMS & FAUTES VOLONTAIRES SUR LES FORUMS |
|
|
00
|
|
|
#8 | |
![]() ![]() Développeur Web Inscription : décembre 2006 Messages : 2 335 ![]() |
Citation:
__________________
Développeur | Zend Certified Engineer Étapes Pour mieux se servir du forum: 1. Commencez par lire les cours et tutoriels ; 2. Faites une recherche; 3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles; Nix>_Rien n'est plus pratique que la théorie |
|
|
|
02
|
Copyright © 2000-2012 - www.developpez.com