Problème de conversion de float en int - C++ - Programmation
Marsh Posté le 03-03-2003 à 16:32:10
Tu peux utiliser ceil() ou floor()
Marsh Posté le 03-03-2003 à 16:40:27
Tetragrammaton IHVH a écrit : Tu peux utiliser ceil() ou floor() |
Ce sont des fonctions d'arrondi ?
C'est ce que je cherchais en ce moment, mais je ne comprend pas pourquoi ça me donne ce 0
Marsh Posté le 03-03-2003 à 16:51:07
ben visiblement il arrondi pas, il converti au int inferieur
ceil et floor arrondissent pas non plus, se contentent de convertir au int superieur/inferieur
Marsh Posté le 03-03-2003 à 17:27:49
Pour arrondir, il suffit de faire un floor(x+0.5), ou ceil(x-0.5)
Marsh Posté le 03-03-2003 à 17:33:20
cela dépend comment tu fais ton calcul je pense
si tu fais
Code :
|
cela risque de ne pas fonctionner
par contre as-tu essayé :
Code :
|
sinon utilise math.h pour utiliser floor ou ceil
a++
Marsh Posté le 03-03-2003 à 17:49:54
En fait je me suis trompé, je suis en double, j'ai :
double a = 0.1;
double b = 0.2;
a /= b;
void fonction(int nb)
{
...
int tab[a];
}
et je fais :
fonction (a);
Mais une fois dans le corps de la fonction, a est égal à 0...
Maintenant le programme ne plante plus, mais j'aimerais bien comprendre
Marsh Posté le 03-03-2003 à 19:10:19
ben deja 0.1/0.2 ca donne 0.5 et non pas 1..
LeGreg
Marsh Posté le 03-03-2003 à 19:16:33
ReplyMarsh Posté le 03-03-2003 à 22:46:30
ReplyMarsh Posté le 04-03-2003 à 09:22:16
legreg a écrit : ben deja 0.1/0.2 ca donne 0.5 et non pas 1.. |
C'est mon clavier qui ne marque pas ce que je veux
Je voulais bien sûr dire 0.1/0.1
Marsh Posté le 23-03-2003 à 02:47:11
raph77 a écrit : J'ai un float que j'obtiens en divisant 0.1 par 0.1. Le résultat est donc 1. |
Les flottants on une représentation binaire et ne peuvent représenter que des combinaisons de divisions par 2.
0.1 (écrit dans le source) ne vaut pas 0.1, mais 0.10000000000000001.
Cela dit, x/x devrait effectivement donner exactement 1. Et c'est effectivement la cas chez moi.
Soit ton processeur manque singulièrement de précision en virgule flottante.
Soit tes deux 0.1 ne sont pas obtenus de la même façon et sont différents.
Soit ton compilateur fait des bizarreries (vu avec Visual C++ 6 sans service pack).
ceyquem: ce que tu propose ne change rien.
Marsh Posté le 23-03-2003 à 10:30:46
En modifiant ce que dit plus haut
Code :
float a,b,c;
int i;
a=0.1;
b=0.1;
c=a/b;
i=(int)(c + 0.5f); /* pour forcer à l'int POSITIF proche */
?
Marsh Posté le 03-03-2003 à 16:28:54
Salut !
J'ai un float que j'obtiens en divisant 0.1 par 0.1. Le résultat est donc 1. Quand je met cette valeur dans un int, il se converti en 0. Je suppose donc qu'en fait il vaut un peu moins de 1 et qu'il est tronqué quand il est converti en int
Comment résoudre mon problème, sachant que je ne veux pas obtenir de float vu que ca doit me donner la taille d'un tableau ?