Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2350 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c] conversion double -> int

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] conversion double -> int

n°716411
fif_x
Posté le 05-05-2004 à 16:08:59  profilanswer
 

Bonjour à tous !
 
alors j'ai une fonction toute simple de ce type la :
 

Code :
  1. int CalculIndiceFreq (double frequence, double startFreq, double stepFreq)
  2. {
  3. int ret;
  4. printf("%f\n",(frequence-startFreq)/(stepFreq));
  5. ret = (frequence-startFreq)/(stepFreq);
  6. printf("%d\n\n", ret);
  7. return ret;
  8. }


 
et en l'appelant plusieurs fois, j'obtiens ces résultats la :
 
1.000000
0
 
21.000000
20
 
7.000000
7
 
25.000000
24
 
4.000000
4
 
Ma question est : d'ou viens le problème de conversion et comment résoudre ce problème ?  
 
On vois qu'à la conversion, mon int perd parfois une unité et parfois il n'en perd pas ...


Message édité par fif_x le 05-05-2004 à 16:10:12
mood
Publicité
Posté le 05-05-2004 à 16:08:59  profilanswer
 

n°716417
Taz
bisounours-codeur
Posté le 05-05-2004 à 16:12:01  profilanswer
 

utilise floor / ceil

n°716434
fif_x
Posté le 05-05-2004 à 16:21:13  profilanswer
 

ces fonctions se trouvent bien dans math.h ????
 
Mon compilateur ne fait aucune référence vers floor :(

n°716439
Taz
bisounours-codeur
Posté le 05-05-2004 à 16:22:46  profilanswer
 

-lm

n°716455
cricri_
Posté le 05-05-2004 à 16:31:35  profilanswer
 

En fait le système fait une troncature quand on convertit un flottant en entier, la dernière fois Taz avait aussi parlé de round(), perso je fais +/- 0.5 pour faire un arrondi.

n°716459
fif_x
Posté le 05-05-2004 à 16:33:21  profilanswer
 

merci Taz, je pense que ces fonctions peuvent m'aider mais meme en modifiant ma fonction :

Code :
  1. int CalculIndiceFreq (double frequence, double startFreq, double stepFreq)
  2. {
  3. int ret;
  4. double temp;
  5. printf("%f\n",(frequence-startFreq)/(stepFreq));
  6. temp = ((frequence-startFreq)/(stepFreq));
  7. temp = floor (temp);
  8. ret=temp;
  9. printf("%d\n\n", ret);
  10. return ret;
  11. }


 
J'ai toujours les mêmes erreurs :(

n°716463
Taz
bisounours-codeur
Posté le 05-05-2004 à 16:35:15  profilanswer
 
n°716465
fif_x
Posté le 05-05-2004 à 16:36:32  profilanswer
 

Nan, la référence marche bien, j'arrive à accéder à la fonction floor, mais mes résultats restent malgré tout les mêmes.

n°716528
fif_x
Posté le 05-05-2004 à 17:06:46  profilanswer
 

J'ai résolu le problème en trichant bien :

Code :
  1. int CalculIndiceFreq (double frequence, double startFreq, double stepFreq)
  2. {
  3. int ret;
  4. double temp;
  5. printf("%f\n",(frequence-startFreq)/(stepFreq));
  6. temp = ((frequence-startFreq)/(stepFreq))+(0.01*stepFreq);
  7. ret=temp;
  8. printf("%d\n",ret);
  9. return ret;
  10. }


 
Le +/- 0.5 et la fonction floor ne marchant pas, j'ai triché comme un goret :-\
 
Maintenant ça marche mais le "+0.01" fait un peu bizarre au milieu du programme.
 
Merci à tous

n°716652
bjone
Insert booze to continue
Posté le 05-05-2004 à 18:36:46  profilanswer
 

ret=temp+0.5;
 
par exemple.

mood
Publicité
Posté le 05-05-2004 à 18:36:46  profilanswer
 

n°716826
cricri_
Posté le 05-05-2004 à 21:47:55  profilanswer
 

+/-0.5 fonctionnent très bien, et c'est ce qui est globalement utilisé, n'en déplaisent aux autres .. ;)


Message édité par cricri_ le 05-05-2004 à 21:48:18
n°716879
Joel F
Real men use unique_ptr
Posté le 05-05-2004 à 23:14:01  profilanswer
 

putain :
 
#include <math.h>
 
floor/ceil et gcc *.c -o truc.exe -lm
 
il ecrit transpaent Taz ???

n°717262
fif_x
Posté le 06-05-2004 à 13:37:10  profilanswer
 

Cricri_ a écrit :

+/-0.5 fonctionnent très bien, et c'est ce qui est globalement utilisé, n'en déplaisent aux autres .. ;)


 
peut-être, mais chez moi ça ne fonctionnait pas :non:  

n°717263
fif_x
Posté le 06-05-2004 à 13:38:16  profilanswer
 

Joel F a écrit :

putain :
 
#include <math.h>
 
floor/ceil et gcc *.c -o truc.exe -lm
 
il ecrit transpaent Taz ???


 
Non, faut juste deviner  :ange:

n°717269
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 06-05-2004 à 13:48:29  profilanswer
 

tu peux aussi caster ou te faire une macro...

n°717271
fif_x
Posté le 06-05-2004 à 13:50:18  profilanswer
 

le cast ne changeais rien :\

n°717289
Joel F
Real men use unique_ptr
Posté le 06-05-2004 à 14:12:06  profilanswer
 

fif_x a écrit :

Non, faut juste deviner  :ange:


taz et moi t'avons donner la solution. Pint barre. je vois pas ou tu tergiverse


Message édité par Joel F le 06-05-2004 à 14:12:15
n°718996
fif_x
Posté le 07-05-2004 à 17:05:21  profilanswer
 

Vos solutions n'ont pas résoluent mon problème mais je vous remercie de m'avoir aider, je vois pas pourquoi tu t'énerves ...
J'ai tres bien compris ce qu'a voulu dire taz par son "-lm", il suffit juste de connaitre un peu le compilateur qu'on utilise ...
 
zeeeeeeeeeeeeeeeeeeen


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c] conversion double -> int

 

Sujets relatifs
Extraction et conversion d'un fichier xml en fichier imageANSI C++ Conversion int to string
Conversion simple de String[résolu ] Conversion UTF-8 => OEM
[C++] conversion double en int ?[C ANSI] conversion chaine de caractere <=> float ou double
[C] conversion d'un double vers un float[REGLE][Java] Conversion int,double <-> object est ce possible? [Résolu]
trouver le rayon d'1 cercle | Conversion int -> double[C] conversion de short int en double!!
Plus de sujets relatifs à : [c] conversion double -> int


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)