Bug avec les nombres réels en AS3

Bug avec les nombres réels en AS3 - Flash/ActionScript - Programmation

Marsh Posté le 16-05-2010 à 18:14:21    

Bonjour,  
la boucle suivante fonctionne bien en AS2 :
 
var n:Number=0;
for(var i=0;i<10;i++) trace(n+=0.1);
 
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
 
Mais en AS3 j'obtiens ceci :
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999 ==> ça devrait finir par la valeur 1
 
Comment faire pour que ça fonctionne aussi ?  
Merci !


Message édité par watoo watoo le 16-05-2010 à 18:14:43
Reply

Marsh Posté le 16-05-2010 à 18:14:21   

Reply

Marsh Posté le 16-05-2010 à 21:47:17    

Ca fait toujours ça avec les flottants (qq soit le langage), ça peut jouer des tours.

 

En l'occurence ça te dérange vraiment ce comportement ? Si tu peux faire avec...


Message édité par theredled le 16-05-2010 à 21:48:30

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 17-05-2010 à 07:45:11    

Ben j'avais jamais remarqué, alors pourquoi en AS2 ça ne le fait pas ? ça m'avais dérangé car je testais quand n=1 et je ne comprenais pas pourquoi ça ne marchait pas. Maintenant pour contourner ce bug je teste quand n>=1 :)

Reply

Marsh Posté le 17-05-2010 à 12:34:01    

Ah oui du coup c'est vraiment dérangeant.
 
Je suis pas spécialiste as3, je trouve zarb que ca fasse péter jusqu'aux comparaisons sacahnt que Number est le seul type pour les nb à virgule.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 17-05-2010 à 16:04:01    

Je ne développe pas en AS mais par contre je peux te dire que de façon générale, du fait des erreurs d'approximation sur les flottants liées à la façon dont ils sont mis en oeuvre (cf "IEEE 754" si tu veux en savoir plus), quand tu boucles dessus il vaut effectivement beaucoup mieux tester >= ou <= plutôt que l'égalité pure, qui en réalité ne se produira probablement jamais.
 
Tu peux également utiliser les fonctions d'arrondis de ton langage pour limiter à une décimale.
 
Pour info dans ton exemple ta variable i ne sert absolument à rien, tu pourrais très bien boucler sur i...


---------------
Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed