Ceil
Core
Membre
Bonjour,
Toujours dans la série NewBie voici une nouvelle question :
Quand je fais :
J'obtiens 2, par contre quand je fais :
J'obtiens 1, je suis persuadé que je passe a coté d'une notion fondamentale, alors si quelqu'un pouvez combler cette lacune !
D'avance Merci
Toujours dans la série NewBie voici une nouvelle question :
Quand je fais :
<br />float f = 1.2 ;<br />int i = ceil(f) ;<br />
J'obtiens 2, par contre quand je fais :
<br />float f = 30/25 ;<br />int i = ceil(f) ;<br />
J'obtiens 1, je suis persuadé que je passe a coté d'une notion fondamentale, alors si quelqu'un pouvez combler cette lacune !
D'avance Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Et oui, c'est bien une notion fondamentale qui fait défaut ! En C, une division entière donne un résultat entier; Ici, f est initialisé à 30/25 = 1
Si tu voulais calculer un flottant, il fallait mettre
f = 30.0/25.0
Car 30 est un entier, alors que 30.0 est un double.
T'es pas le premier, et tu seras pas le dernier !
Détail pour être exhaustif : 30.0 est un double, 30.0f est un float. C'est bon à savoir quand on s'intéresse aux erreurs d'arrondis.
+
Chacha
si tu divises 30 par 25.0 c'est différent: là tu divises par un float donc le résultat sera un float aussi et f contiendra 1.xxxxxxx.
EDIT
grillé....
quoique: t'es sûr Chacha ? c'est pas plutôt ce qui est après le '/' qui doit être un float ? ce qui est avant n'a pas d'importance me semble-t-il ? mon 'richie et kernighan' est égaré depuis longtemps...
MIeux vaut avoir l'air ridicule 5 mins que rester idiot toute sa vie ! :P
C'est en faisant des conneries et en posant des questions qu'on apprend le mieux...:P
En fait, il suffit qu'une des deux opérandes soit un float pour convertir l'intégralité de l'opération en float.
Il suffit de se dire que quand les types ne coà¯ncident pas, le compilateur privilégie automatiquement celui qui minimisera l'erreur.
30/25.0f => 30 est converti en float, le résultat est un float
30/25.0 => 30 est converti en double, le résultat est un double
30.0f/25.0 => 30.0f est converti en double, le résultat est un double
etc.
Une idée? Merci