steph12358
Messages postés149Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention10 décembre 2009
-
10 déc. 2008 à 16:58
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
12 déc. 2008 à 14:06
Bonjour tout le monde
Désolé pour la question super basique mai j'ai un soucis
Ce code fonctionnait dans mon projet jusqu'à ce que j'ajoute un contrôle écrit en pascal. Depuis
les syntaxes (float)1500 ou (double)325 ne semblent plus fonctionner...
ex:
" int res;
int i;
float d;
i = 52;
res = i;
d = (float)i/(float)5 + (float)0.5;
d = (int)(d*(float)5);
"
me renvoie un message signalant une opération en virgule flottante incorrecte...
Le pire c'est que ça passe à la compil et plante à l'exécution
Pourquoi ?
PS:
100.0 c'est bien un double ? 100.f c'est bien un flottant ?
je travaille avec c++ builder. Est-ce dù à une option de l'environnement ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 11 déc. 2008 à 14:18
Salut,
A mon avis, l'erreur vient d'ailleurs...
Tu travailles en invite de commande sans débogueur ? Si oui, met des printf ou (mieux) récupère un débogueur. Va savoir, peut être que CodeGear propose encore de quoi faire du C++ gratuitement.
Sinon tu peux passer par div de stdlib.h :
<hr size="2" width="100%" />#include "stdio.h"
#include "stdlib.h"
steph12358
Messages postés149Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention10 décembre 20091 11 déc. 2008 à 09:36
Salut BruNews
En fait j'essaye de faire une fonction d'arrondi à 5 pour faire une "grille
magnétique" dans une appli
j'ai essayé:
//quelque soit la valeur de i de toute façon ça donne la même
chose en débogage (en débogage avec 33)
int arrondi_magnet(int i)
{
float d;
int resultat;
d = (((float)i)/5.0f) + 0.5f;
d = (int)d;
d = d * 5.0f;
resultat = (int)d;
return resultat;
}
"opération en virgule flottante incorrecte"
je caste le int en float, je le divise par un float, j'y ajoute une float récupère
le résultat dans un float...et ça plante!
Je sais, je sais... les constantes littérales c'est pas beau...
mais quand même j'aimerais savoir ce qui cloche
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 12 déc. 2008 à 14:06
Je serais surpris qu'il s'agisse d'un problème de configuration de l'environnement, bien que l'on puisse effectivement configurer la façon dont sont traitées les opérations à virgule flottantes.
S'il y a une erreur de calcul, il y a une erreur de calcul... Le fait de gérer l'erreur ou pas c'est un autre problème.
Si tu mets :
Set8087CW(0x133f);
Au lancement de ton prog, tu devrais ne plus avoir d'erreurs dûes à la FPU. En cas d'erreur de calcul (Division par zéro...) la FPU te renverra des valeurs particulière correpondant à l'infini, pas un nombre (NaN)... Mais tu n'auras plus de messages d'erreur.