Probleme entre float et double

Résolu
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008 - 18 avril 2008 à 21:06
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008 - 18 avril 2008 à 23:42
Salut a tous,
j'ai un probleme bizarre. J'ai fait un programme avec des fonctions et des variables float. Tout marche impecable. Cependant j'ai voulu passer à des variables double et  j'ai donc changé tout les float par double. Et bien sur sa ne marche pas (le prog se compile mais les resultat sont mauvais).
Quel difference y a t-il donc entre le float et le double??. Pour printf et scanf le %f est bien commun au float et au double ?

Voila le code (en float) qui marche, il est regroupé dans plusieurs fichier (mais ça c'est pas vraimment important). Il s'agit d'un programme de calcul d'integrale par la methode de simpson.

Dans ce fichier on a la fonctions de resolution et celle qui renvoie la valeur de f(x) la fonction calculée :

#include <stdio.h>
#include <math.h>
float f(float x);

//algorithme de calcul de simson
float simpson (float a, float b,int N)
{
  float h=(b-a)/N;
 
  float sigma1=0,sigma2=0,I=0;
  int j=0;

  for(j=1;j<=(N/2)-1;j++)
    {
   
      sigma1=sigma1+f(a+2*h*j);

    }
  //  printf("sigma1=%f\n",sigma1);getchar;
 
  for(j=1;j<=(N/2);j++)
    {
   
      sigma2=sigma2 +f(a+h*((2*j)-1));

    }
 
  // printf("sigma2=%f\n",sigma2);getchar;
 
  I= (h/3)*(f(a)+2*sigma1+4*sigma2+f(b));
 
  return I;
 
}
//renvoie l'image par la fonction f
float f(float x)
{
  float y;
    y=1/(sqrt(1-(sin(3.14/6)*sin(3.14/6))*(sin(x)*sin(x))));
    return y;
}

Et dans un autre on a un main qui communique avec ça pour obtenir les resultats.
Voila j'esperere que vous pourrez m'aider. En fait j'ai juste un probleme avec float et double, l'algorithme est juste, mais je prefere vous presenter trop que pas asser

Un grand merci d'avance.

7 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
18 avril 2008 à 21:52
essaye en remplaçant %f par %lf, ça devrait aller (c'est surtout pour scanf en fait).
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 avril 2008 à 22:33
Les double sont plus précis et en général plus rapide si tu utilises les fonctions de la fpu, genre la trigo etc.
3
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
18 avril 2008 à 22:37
J'ai remplacer le scanf par du %lf est le resulat donne -infini quand je met que des doubles.
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
18 avril 2008 à 23:03
bizarre j'ai testé chez moi ton code, il renvoyait le même résultat pour float et double.

int

main(
void)
{
   
double a,b;
   scanf(
"%lf%lf",&a,&b);   
   printf(
"%lf\n",simpson(a,b,100));
   
return 0x0;
}

tu utilises quoi comme compilateur?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
18 avril 2008 à 23:05
gcc -o simpson test-simpson.c simpson.c -lm

Mais moi aussi j'ai fait un petit code de merde avec un appel avec scanf("%lf",&x) et sa marche
Donc je ne sais plus quoi modifier ...
Je sent que je vais devoir creer un nouveau fichier
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
18 avril 2008 à 23:17
bof y a pas de raisons...
si tu fais:

double a,b;
scanf("%lf%lf",&a,&b);
printf("%lf\n%lf\n",a,b);
obtiens-tu les bonnes valeurs de a et b?

d'autre part, as-tu testé avec des valeurs directement dans le code, par exemple simpson(1.0,3.0,100)? Si cela fonctionne ou pas permettra de cerner le problème : soit la fonction soit la saisie de variables.
0
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
18 avril 2008 à 23:42
je pense qu'il s'agit de la saisie car j'ai mis un printf("a=%lf\nb=%lf\n");getchar(); au debut de la fonction simpson qui m'affiche a=0.000 et b=0.000 (j'ai dejà vu ce probleme mais la j'ai bien mis scanf("%lf)) et j'ai aussi essayer de mettre ce meme  printf("a=%lf\nb=%lf\n");getchar(); juste apres la saisie des variables mais il n'apparait pas dans le programme, il ne s'affiche pas.
0
Rejoignez-nous