Probleme entre float et double

Résolu
Signaler
Messages postés
133
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2008
-
Messages postés
133
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2008
-
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

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
essaye en remplaçant %f par %lf, ça devrait aller (c'est surtout pour scanf en fait).
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
133
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2008

J'ai remplacer le scanf par du %lf est le resulat donne -infini quand je met que des doubles.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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?
Messages postés
133
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2008

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
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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.
Messages postés
133
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
29 avril 2008

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.