declaration et initialisation de variables - C - Programmation
Marsh Posté le 14-06-2005 à 18:06:50
ben que tu déclares des float mais que tu les initialises avec des double
Marsh Posté le 14-06-2005 à 18:31:34
6ril25 a écrit : Hello, |
Ce qu'explique Taz avec sa verve habituelle, c'est que tu as, sur la même ligne, 3 variables déclarées en float; chaque déclaration de variable étant séparée de la suivante par l'opérateur "," qui est un opérateur de concaténation d'instruction qu'on voit souvent dans les "for" => for (i=0, j=10; ...; i++, j--)
Ensuite, les valeurs "0." (sous-entendu "0.0" ), "10." (sous-entendu "10.0" ) et "0.01" sont des variables écrites sous la notation "virgule flottante double précision", ce qui est toujours le cas lorsque tu utilises des nombres à virgule.
Si tu voulais préciser "variables à virgule flottante simple précision", il te faudrait rajouter la lettre "f" ou "F" après le nombre =>
float top=0.0f, fin=10.0F, tic=0.01f;
Dans l'absolu, ce n'est pas propre parce que ça montre que tu ne connais pas la précision de tes nombres mais pas non plus réellement grave, le compilo te transformant tes nombres de façon implicite en "float".
Marsh Posté le 15-06-2005 à 08:52:24
oki, mais alors, (pour etre sur d'avoir bien compris), si je fais:
float top = 0., fin = 10., tic = 0.01;
while (top != fin) top += tic;
est-ce que la boucle peut se terminer?? (la précision n'etant pas la meme, top peut-il etre égal à 0.01 puis 0.02... 9.99 et enfin 10?)
Marsh Posté le 15-06-2005 à 09:22:48
6ril25 a écrit : oki, mais alors, (pour etre sur d'avoir bien compris), si je fais: |
On ne peut utiliser == ou != avec des flottants, la précision est insuffisante. Il faut utiliser '<=' ou '>=' ou '(a-b) < FLT_EPSILON' ou '(a-b) < DBL_EPSILON' selon les cas...
Marsh Posté le 15-06-2005 à 09:24:08
Une précision à la réponse d'Emmanuel : FLT_EPSILON et DBL_EPSILON sont définis dans float.h
Marsh Posté le 15-06-2005 à 09:29:32
c'est bien ce ke j'en déduisais
merci pour toutes ces précisions
Marsh Posté le 16-06-2005 à 03:20:19
heu, z'êtes sur que dans le cas :
Code :
|
la virgule est bien un opérateur de "concaténation d'instructions" ? ( quoique le nom précis soit plutôt "opérateur séquentiel" )
certes float top = 0. est une instruction valide, mais fin = 10. n'en est pas une ( enfin si, c'est une affectation à la variable fin, mais c'est pas une déclaration de fin en tant que float ), la virgule dans la déclaration de variable, c'est justement précisément pas l'opérateur séquentiel il me semble
Marsh Posté le 16-06-2005 à 08:40:56
0x90 a écrit : heu, z'êtes sur que dans le cas :
|
Ce code est tout à fait valide, bien que je n'en recommande pas l'usage. Il est équivallent à
float top = 0.; |
(en dehors du fait qu'il serait plus cohérent de mettre un suffixe 'f' vu que ce sont des 'float')
Marsh Posté le 16-06-2005 à 09:42:00
Emmanuel Delahaye a écrit : Ce code est tout à fait valide, bien que je n'en recommande pas l'usage. Il est équivallent à
|
Voui Voui, je disais pas le contraire juste que dans ce cas la, la virgule n'est pas l'opérateur séquentiel, vu que dans l'opérateur séquentiel chaque partie entre virgule doit être une instruction valide.
Si c'est un cas d'opérateur séquentiel , le code
Code :
|
équivaudrait à
Code :
|
Et qui n'a pas du tout la même signification ...
( je sais ma remarque était un tantinet poussée dans l'escarmouche anale de diptères )
Marsh Posté le 16-06-2005 à 15:08:50
0x90 a écrit : Voui Voui, je disais pas le contraire juste que dans ce cas la, la virgule n'est pas l'opérateur séquentiel, vu que dans l'opérateur séquentiel chaque partie entre virgule doit être une instruction valide.
|
C'est vrai que chaque instruction séparée par une virgule doit être une instruction valide et que ta remarque est correcte; mais je pense que dans le cas précis d'une déclaration de pluisieurs variables avec virgule, le type est implicitement répété
=> "float a, b" est donc traduit par "float a, float b"
Un peu comme dans "short i" qui est automatiquement traduit par "auto signed short int i"
Marsh Posté le 16-06-2005 à 16:05:45
Je dirai que 0x90 a raison, petite citation :
The comma operator cannot appear in contexts where a comma is used to separate items in a list (such as arguments to functions or lists of initializers). |
Donc il n'y a pas de rapport, ils précisent d'ailleurs par la suite que si on veut l'utiliser dans ces cas là il faut rajouter des parenthèses.
Marsh Posté le 14-06-2005 à 18:05:09
Hello,
je voudrais savoir ce k'implique le . dans la déclaration d'un float:
ex:
float top = 0., fin = 10., tic = 0.01;
merci