login.php?sid=89650266ae8e6c2453cb5231f1ea47d9 profile.php?mode=register&sid=89650266ae8e6c2453cb5231f1ea47d9 faq.php?sid=89650266ae8e6c2453cb5231f1ea47d9 memberlist.php?sid=89650266ae8e6c2453cb5231f1ea47d9 search.php?sid=89650266ae8e6c2453cb5231f1ea47d9 index.php?sid=89650266ae8e6c2453cb5231f1ea47d9

boucles décimales en binaire

 
Post new topic   Reply to topic     Forum Index -> Les CaRScripts
View previous topic :: View next topic  
Author Message
alain974



Joined: 13 Jun 2009
Posts: 150
Location: Réunion

PostPosted: Mon Mar 28, 2011 11:43 am    Post subject: boucles décimales en binaire Reply with quote

Si on veut afficher les réels entre 0 et 1 par pas de 0,1 avec le script suivant:

Code:
for(x=0;x<=1;x=x+0.1){
   Println(x);
}


on a l'affichage suivant:

Code:
0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999


Cela est dû à ce que JavaScript calcule en binaire, et que 0,1 n'est pas un nombre aussi simple en binaire qu'en décimal. Le problème existe aussi dans les tableurs et dans d'autres logiciels d'algorithmique que CaRMetal... Mais JavaScript permet d'y remédier, tout simplement en forçant les valeurs de x à rester exactes à une décimale près:

Code:
for(x=0;x<=1;x=Math.round(10*(x+0.1))/10){
   Println(x);
}


donne bien le résultat escompté. Bien entendu on peut faire autre chose que simplement afficher les valeurs de x...
Back to top
View user's profile Send private message
alain974



Joined: 13 Jun 2009
Posts: 150
Location: Réunion

PostPosted: Thu Sep 29, 2011 6:25 am    Post subject: Reply with quote

Version plus simple:

Code:

for(x=0;x<=1;x=Number((x+0.1).toFixed(1))){
   Println(x);
}


(plus simple parce qu'elle évite de passer par la multiplication puis division par 10, mais elle nécessite de reconvertir en nombre ce qui est devenu une chaîne de caractères; on n'a rien sans rien...)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic     Forum Index -> Les CaRScripts All times are GMT
Page 1 of 1

 
  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin