Pb de concersion double -> int

Fermé
pom - 27 janv. 2005 à 11:58
 pom - 28 janv. 2005 à 09:28
Bonjour, j'ai un pb sur ma conversion d'un double en entier (j'avoue que j'ai un peu honte de cette question mais je ne trouve pas mon erreur sur mon prgm de 10 lignes...)

Voici mon code

#include<iostream>
using namespace std;

typedef unsigned long ulong;

int main()
{
const double tfin=4e-2;
const double dt=1e-5;
const ulong nb_iter=(ulong) (tfin/dt+1);
const double nb_iter2=tfin/dt+1.;

cout<<"nb_iter = "<<nb_iter<<endl;
cout<<"nb_iter2 = "<<nb_iter2<<endl;
cout<<4e-2/1e-5+1<<endl;

return 0;
}


Voici la réponse a la fin de l'exécution du prgm :

nb_iter = 4000
nb_iter2 = 4001
4001


Maintenant, si je fais dt=1e-2, 1e-3, 1e-4, 1e-6, 1e-7 j'ai bien nb_iter==nb_iter2==le calcul de la dernière ligne, mais pour dt=1e-5 et 1e-8 je n'ai plus les mêmes résultats !!

Pouvez-vous m'expliquer l'erreur s'il vous plait ?
(j'ai besoin de nb_iter car je veux faire un vector de longueur nb_iter (qui est un entier))

merci par avance (et excusez-moi de cette question sûrement très simple)
A voir également:

1 réponse

j'ai trouvé la solution :
en fait, pour dt=1e-5, tfin/ds+1=4000.9999999
donc comme la conversion double -> int est une simple troncature, il faut que je tape
cnst ulong nb_iter = (ulong ) (tfin/ds+1+0.5);
le +0.5 ne sert qu'à passer à l'unité supérieure
0