Gros problème de division et d'arrondi ! - C++ - Programmation
Marsh Posté le 12-10-2002 à 19:02:42
1 et 4 dont des entier, et la division entre deux entiers retourne forcéments un entier. Fait la convertion AVANT de faire la division.
Marsh Posté le 12-10-2002 à 19:03:46
kadreg a écrit a écrit : 1 et 4 dont des entier, et la division entre deux entiers retourne forcéments un entier. Fait la convertion AVANT de faire la division. |
Merci de ton aide, mais une conversion c'est à dire ?
Marsh Posté le 12-10-2002 à 19:05:45
fait ca :
Code :
|
Il doit bien y en avoir l'un d'entre eux qui marche
Marsh Posté le 12-10-2002 à 19:08:32
Code :
|
Ou alors
Code :
|
Marsh Posté le 12-10-2002 à 19:09:47
Oui mais imaginons que l'utilisateur entre une variable 'val' (cin>>val), il faut que je la mette 'val' en float ou il faut que je convertise la variable tapé (des entiers) en relatif
Marsh Posté le 12-10-2002 à 19:14:58
Merci beaucoup, j'ai mis un float() devant les variables et c'est bon ca marche impeccable
Merci beaucoup à vous
Marsh Posté le 12-10-2002 à 22:20:02
Souvent, quand valeur comme ça, on force les choses en écrivant
test = 1 / 4.0; (du moins d'après mes tests car ai déja eu ce genre de pb). Le .0 impose la nature "float" du 4.
Marsh Posté le 13-10-2002 à 03:52:56
1)
Le 0 après le "." est optionnel, "4." est valide.
Le 0 avant le "." est optionnel s'il y a au moins un chiffre derrière, ".5" est valide.
2)
Les constantes littérales à virgules sont des doubles.
Suffixer avec "f" pour en faire des float.
Code :
|
Marsh Posté le 13-10-2002 à 11:35:05
Ce code ne me produit aucun message :
Code :
|
avec cette ligne de commande :
Code :
|
gcc 2.96 et 3.04 idem
Marsh Posté le 14-10-2002 à 02:15:17
ca m'etonnerait qu'il ait compile:
Code :
|
LeGreg
Marsh Posté le 14-10-2002 à 02:17:07
sinon on evite d'appeler ses programmes test
sous UNIX
arf
ou alors on les execute comme ca :
> ./test
A+
LeGreg
Marsh Posté le 14-10-2002 à 03:24:00
Sans doute parce que la perte de précision à lieu à l'exécution.
Dans mon exemple, la perte de précision est sur une constante, et n'a pas de sens.
Faire le calcul avec des types plus grands à un sens: avoir plus de précision intermédiaire.
En C/C++, on considère en général que le programmeur sais ce qu'il fait.
Pfff... ces promotions silencieuses sont sources de bogues.
Marsh Posté le 14-10-2002 à 20:20:40
Si, je confirme. Ca compile bien sous 2.96. Par contre j'ai besoin des modifs pour gcc 3.0.4. Mais bon c'est pas important.
Pour info, le type char et le type float sont des types faibles en C et en C++. Le compilo doit toujours les convertir en le int/double suivant le cas avant de faire n'importe quel calcul. Donc c'est aussi pour ca que la convertion en arrière ne donne pas d'avertissements.
Marsh Posté le 14-10-2002 à 23:02:15
Musaran a écrit a écrit : 2) Les constantes littérales à virgules sont des doubles. Suffixer avec "f" pour en faire des float.
|
Merci pour l'info. Je confusionne 0.4 et 0.4f (mal compris). Dès que j'ai l'occasion, je corrige mes sources dans ce sens.
Marsh Posté le 12-10-2002 à 19:01:08
Voilà j'ai un problème avec un programme que je fais sur une étude statistique (en C++), j'ai remarqué que lors des divisions quelque soit la variable utilisée, j'avais un arrondi à l'unité près
Par ex :
Là je compile et au lieu d'avoir 0.25, j'ai 0
Je comprends pas pourquoi j'ai ce résultat
PS : j'ai utilisé avec des variables type double, long double ...