Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
959 connectés 

  FORUM HardWare.fr
  Programmation
  C

  declaration et initialisation de variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

declaration et initialisation de variables

n°1119872
6ril25
Posté le 14-06-2005 à 18:05:09  profilanswer
 

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

mood
Publicité
Posté le 14-06-2005 à 18:05:09  profilanswer
 

n°1119874
Taz
bisounours-codeur
Posté le 14-06-2005 à 18:06:50  profilanswer
 

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

n°1119896
Sve@r
Posté le 14-06-2005 à 18:31:34  profilanswer
 

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.
n°1120283
6ril25
Posté le 15-06-2005 à 08:52:24  profilanswer
 

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
n°1120317
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-06-2005 à 09:22:48  profilanswer
 

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/
n°1120319
Elmoricq
Modérateur
Posté le 15-06-2005 à 09:24:08  profilanswer
 

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
n°1120324
6ril25
Posté le 15-06-2005 à 09:29:32  profilanswer
 

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

n°1121441
0x90
Posté le 16-06-2005 à 03:20:19  profilanswer
 

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.
n°1121482
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-06-2005 à 08:40:56  profilanswer
 

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/
n°1121550
0x90
Posté le 16-06-2005 à 09:42:00  profilanswer
 

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.
mood
Publicité
Posté le 16-06-2005 à 09:42:00  profilanswer
 

n°1122039
Sve@r
Posté le 16-06-2005 à 15:08:50  profilanswer
 

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"

n°1122167
Tarabiscot​e
Posté le 16-06-2005 à 16:05:45  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  declaration et initialisation de variables

 

Sujets relatifs
Fichier .bat : problème de gestion des variablesanalyser un fichier texte pour initialiser des variables
[sessions]pb de variablespb de declaration d'une variable UInt64
Problème de variables[ASP] Problème de declaration de tableau [Résolu]
[apiwin32]initialisation d'une boite de dialogue[Résolu]Variables non reconnues sous easy php
gestion des variables dans une dll multithread ?[c++builder] declaration, initialisation de variables "globales"
Plus de sujets relatifs à : declaration et initialisation de variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR