declaration et initialisation de variables

declaration et initialisation de variables - C - Programmation

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

Reply

Marsh Posté le 14-06-2005 à 18:05:09   

Reply

Marsh Posté le 14-06-2005 à 18:06:50    

ben que tu déclares des float mais que tu les initialises avec des double

Reply

Marsh Posté le 14-06-2005 à 18:31:34    

6ril25 a écrit :

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


 
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".


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

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?)


Message édité par $$$$$$TENSHI$$$$$$ le 15-06-2005 à 08:52:53
Reply

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:
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?)


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...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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  :)


Message édité par Elmoricq le 15-06-2005 à 09:25:09
Reply

Marsh Posté le 15-06-2005 à 09:29:32    

c'est bien ce ke j'en déduisais ;)
 
merci pour toutes ces précisions

Reply

Marsh Posté le 16-06-2005 à 03:20:19    

heu, z'êtes sur que dans le cas :
 

Code :
  1. float top = 0., fin = 10., tic = 0.01;


 
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 ;)


Message édité par 0x90 le 16-06-2005 à 03:22:09

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 16-06-2005 à 08:40:56    

0x90 a écrit :

heu, z'êtes sur que dans le cas :

Code :
  1. float top = 0., fin = 10., tic = 0.01;


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 ;)


Ce code est tout à fait valide, bien que je n'en recommande pas l'usage. Il est équivallent à

float top = 0.;
float fin = 10.;  
float tic = 0.01;  


(en dehors du fait qu'il serait plus cohérent de mettre un suffixe 'f' vu que ce sont des 'float')
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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 à

float top = 0.;
float fin = 10.;  
float tic = 0.01;  


(en dehors du fait qu'il serait plus cohérent de mettre un suffixe 'f' vu que ce sont des 'float')


 
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 :
  1. float top = 0., fin = 10., tic = 0.01;


équivaudrait à

Code :
  1. float top = 0.;
  2. fin = 10.;
  3. tic = 0.01;


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 )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 16-06-2005 à 09:42:00   

Reply

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.
Si c'est un cas d'opérateur séquentiel , le code  

Code :
  1. float top = 0., fin = 10., tic = 0.01;


équivaudrait à

Code :
  1. float top = 0.;
  2. fin = 10.;
  3. tic = 0.01;


Et qui n'a pas du tout la même signification ...


 
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"

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

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