Bonjour
je souhaiterais pouvoir faire une boucle avec comme index, un nombre commençant par 0.000 , comment s'y prendre pour que ce dernier soit pris en compte et me sort 0.001,0.002,0.003 etc... ?
merci d'avance.
Bonjour
je souhaiterais pouvoir faire une boucle avec comme index, un nombre commençant par 0.000 , comment s'y prendre pour que ce dernier soit pris en compte et me sort 0.001,0.002,0.003 etc... ?
merci d'avance.
Naïvement :
Mais je préfère, et recommande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double x; /* Je ne vois aucune raison de preferer naturellement float a double */ for(x = 0.000; x <= 1.000; x += 0.001) /* Le traitement */ ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int i; double x; for(i = 0; i <= 1000; i++) { x = i / 1000.0; /* Le traitement */ ; }
Voire pour effectuer un traitement sans devoir passer par des variables temporaires.
Exemple :
C'est pour moi plus efficace que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 double r; double var = 0.25 for (r = 0.000; r < (90 + var); r += var) { rotation (r); /* On effectue une rotation en degrés */ }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int cpt; double r = 0.000; double var = 0.25; for (cpt = 0; r < ((90 / var) + 1); cpt++) { r += var; rotation (r); }
Ah ?Envoyé par pfeuh
Source : http://www.crossware.com/datasheets/c8051nt.htm8051 specific language extensions are described below.
Data sizes
The compiler uses the following sizes for the various C data types:
(...)
float: 4 bytes (32 bits)
double: 8 bytes (64 bits)
(...)
De toute façon j'ai pas dit que le type float ne servait à rien, que ça soit sur 8051 ou ailleurs, mais que s'il n'y a pas de raisons très particulières vaut mieux utiliser double plutôt que float.
Bsans : franchement, utiliser un type flottant comme indice dans une boucle n'est pas une très bonne idée à cause de l'imprécision de ces types. Puis, je doute que le second code est plus efficace que le premier mais de toute façon, que ça soit vraiment le cas où pas, tes deux techniques ne sont pas une bonne façon de faire une rotation animée, toujours à cause de l'imprécision des réels. La bonne méthode est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int i; double delta_angle = 0.25; for(i = 0; i <= 360; i++) { set_angle(i * delta_angle) }
C'était juste une illustration du fait qu'on puisse avoir besoin d'autre chose qu'un "compteur classique" dans une boucle.
Je ne dis pas que c'est bien ou pas, juste que c'est faisable et que ça peut servir dans certains cas.
Partager