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

  FORUM HardWare.fr
  Programmation
  C++

  [C] conversion d'un double vers un float[REGLE]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] conversion d'un double vers un float[REGLE]

n°409799
aurbadguy
Posté le 27-05-2003 à 22:27:08  profilanswer
 

voila mon problème dans une semaine je rend mon projet  
et j'ai une erreur car j'ai une fonction ( resolution de gauss) qui tourne avec des doubles (avec des float je pe pas effectuer certaines opérations)  
et j'ai besion de le passer en float donc je fais un cast du genre:  
blabla =(float) blablabla;
 
pour la suite de mon prog (si je met des double de partous ca génère d'autres erreurs du je pense a la mémoire)  
donc si qqun sait comment effectués cette conversion sans générer un superbe message d'erreur a l'execution (write of adress) il me sauvra la vie et mon projet  
merci d'avance


Message édité par aurbadguy le 28-05-2003 à 20:19:15
mood
Publicité
Posté le 27-05-2003 à 22:27:08  profilanswer
 

n°409816
theshockwa​ve
I work at a firm named Koslow
Posté le 27-05-2003 à 22:58:57  profilanswer
 

:heink:
 
le cast ne génère pas d'erreurs en lui-même ...
 
Edit :
A la limite, j'imagine qu'on compilo pourrait donner un warning pour signaler la perte de précision occasionnée, mais sinon, je ne vois pas trop ...
Donne voir les messages d'erreurs entiers et les lignes de code concernées ... Ce sera plus facile pour t'aider


Message édité par theshockwave le 27-05-2003 à 22:59:58

---------------
last.fm
n°409836
aurbadguy
Posté le 27-05-2003 à 23:35:50  profilanswer
 

/*---------------------------------------------------------------------------*/
/*                       Calcule de l'ifs perso                              */
/*---------------------------------------------------------------------------*/
 
 
int calculifs (POINT tab[])
{
float valx[3],valy[3],valtransforme[3],valretour1[3];
int testok;
float val1=123.123,val2,val3,val4,val5,val6;
double valt;
 
 valx[0]=400;
 valy[0]=200;
 valx[1]=300;
 valy[1]=300;
 valx[2]=500;
 valy[2]=300;
 
   valtransforme[0]=tab[0].x;
   valtransforme[1]=tab[1].x;
   valtransforme[2]=tab[2].x;
 
   testok=resolutionifs(valx,valy,valtransforme,valretour1);
   if(testok==-1)
   {
    return (-1);
   }
 
 
    if(compteurifsperso==0)
   {
    valt=valretour1[0];  //ici ca plante pas
     val1=valretour1[0];   // mais ici ca plante !!!!
      ifsperso1[0]=val1;
    ifsperso1[1]=valretour1[1];
    ifsperso1[4]=valretour1[2];
   }
    if(compteurifsperso==1)
   {
     ifsperso2[0]=valretour1[0];
    ifsperso2[1]=valretour1[1];
    ifsperso2[4]=valretour1[2];
   }
    if(compteurifsperso==2)
   {
     ifsperso3[0]=valretour1[0];
    ifsperso3[1]=valretour1[1];
    ifsperso3[4]=valretour1[2];
   }
    if(compteurifsperso==3)
   {
     ifsperso4[0]=valretour1[0];
    ifsperso4[1]=valretour1[1];
    ifsperso4[4]=valretour1[2];
   }
   valtransforme[0]=tab[0].y;
   valtransforme[1]=tab[1].y;
   valtransforme[2]=tab[2].y;
 
   testok=resolutionifs(valx,valy,valtransforme,valretour1);
    if(testok==-1)
   {
    return (-1);
   }
 
    if(compteurifsperso==0)
   {
     ifsperso1[2]=valretour1[0];
    ifsperso1[2]=valretour1[1];
    ifsperso1[5]=valretour1[2];
   }
   {
     ifsperso2[2]=valretour1[0];
    ifsperso2[2]=valretour1[1];
    ifsperso2[5]=valretour1[2];
   }
   {
     ifsperso3[2]=valretour1[0];
    ifsperso3[2]=valretour1[1];
    ifsperso3[5]=valretour1[2];
   }
   {
     ifsperso4[2]=valretour1[0];
    ifsperso4[2]=valretour1[1];
    ifsperso4[5]=valretour1[2];
   }
   return(0);
}
 
 
 
 
 
 
 
 
/*---------------------------------------------------------------------------*/
/*                       Résolution de l'équation pour l'ifs perso           */
/*---------------------------------------------------------------------------*/
int resolutionifs(float valx[],float valy[],float valtransforme[],float *valretour)
//valx contient les abcisses des 3 points d'origine
//valy contient les ordonnées des 3 points d'origine
//valtransforme contient une fois les abcisses des 3 nouveaux points
//                       et une autre les ordonnées des 3 nouveaux points
// la fontion gauss ne gère pas  les coefficients égals à 0.
{
 int n=3,j,k,test=0;
 double matrice[4][3];
 double resultat[10];
   double temp,det;
 int a,x;
   int ligne,sol;
 
 //Saisi des facteurs des equations ds matrice[][]
 
 
 
   while(test==0)
   {
 
      matrice[0][0]=(double)valx[0];
      matrice[0][1]=(double)valx[1];
      matrice[0][2]=(double)valx[2];
      matrice[1][0]=(double)valy[0];
      matrice[1][1]=(double)valy[1];
      matrice[1][2]=(double)valy[2];
      matrice[2][0]=(double)1;
      matrice[2][1]=(double)1;
      matrice[2][2]=(double)1;
      matrice[3][0]=(double)valtransforme[0];
      matrice[3][1]=(double)valtransforme[1];
      matrice[3][2]=(double)valtransforme[2];
 
 
 
    //calcul du derterminant
     det=(matrice[0][0]*matrice[1][1]*matrice[2][2])+(matrice[0][1]*matrice[1][2]*\
     matrice[2][0])+(matrice[0][2]*matrice[1][0]*matrice[2][1])-(matrice[0][2]*\
     matrice[1][1]*matrice[2][0])-(matrice[1][2]*matrice[2][1]*matrice[0][0])-\
     (matrice[2][2]*matrice[0][1]*matrice[1][0]);
     printf("le determinant de la matrice vaut : %.0f \n",det);
     getch();
      if( det!=0.0)
      {
       test=1;
      }
      else
      {
           return (-1) ;
      }
 
    }
 
 
   // triangulation du systeme.
   for(x=0;x<n-1;x++)
 {
  for(a=1+x;a<n;a++)
  {
   temp=matrice[x][a];
 
   for (k=x;k<n+1;k++)
   {
    matrice[k][a]=matrice[k][a]*matrice[x][x]-matrice[k][x]*temp;
   }
  }
 }
   //Remplacage et résolution
 resultat[n-1]=matrice[n][n-1]/matrice[n-1][n-1];
 
 matrice[n][n-1]=0;
 matrice[n-1][n-1]=0;
 
 for (ligne=1;ligne<=n;ligne++)
 {
  for (sol=2;sol<=n;sol++)
  {
   matrice[n-ligne][n-sol]=matrice[n-ligne][n-sol]*resultat[n-ligne];
   matrice[n][n-sol]=matrice[n][n-sol]-matrice[n-ligne][n-sol];
   matrice[n-ligne][n-sol]=0;
  }
  resultat[n-(ligne+1)]=matrice[n][n-(ligne+1)]/matrice[n-(ligne+1)][n-(ligne+1)];
 }
 
 // Copie des résultats
 for (j=0;j<n;j++)
 {
  valretour[j]=(float)(resultat[j]);  //la je fais le cast  et ca passe !!                
 }
 return 0;
}
/*---------------------------------------------------------------------------*/
/*                       Résolution de l'équation pour l'ifs perso           */
/*                                      FIN                                  */
/*---------------------------------------------------------------------------*/
 
 
l'erreur exat est :
Fault: access violation at 0x402f96: read of address 0x0
 
 
ifsperso1,2,3 et 4 sont declarés en globale
tableau de float

n°409838
theshockwa​ve
I work at a firm named Koslow
Posté le 27-05-2003 à 23:41:44  profilanswer
 

aurbadguy a écrit :


l'erreur exat est :
Fault: access violation at 0x402f96: read of address 0x0


 
:o Tu cherches à lire un élément à l'adresse 0 (NULL quoi ...)
 
L'erreur ne vient pas des casts ... Je lis ton code et je t'en reparle après ...
 
Edit : le plus simple serait qd même que tu fasses un peu de debug pour aller jusqu'à la zone où se déclenche l'erreur en pas à pas et en observant les valeurs de tes pointeurs ...
 
Edit 2 : Vérifie que valretour n'est pas NULL ... pareil pour tes tableaux en entrée ...


Message édité par theshockwave le 27-05-2003 à 23:50:48

---------------
last.fm
n°409892
aurbadguy
Posté le 28-05-2003 à 08:20:51  profilanswer
 

valretour n'est pas nul car j'arrive a copier la valeur dans valt!!!

n°409926
skeye
Posté le 28-05-2003 à 08:58:27  profilanswer
 

Quitte à avoir une fonction qui prend un float *, passe-lui plutot un float * qu'un tableau de float, pour voir...

n°410749
aurbadguy
Posté le 28-05-2003 à 20:17:46  profilanswer
 

bon je comprend pas pkoi mais je viens d'essayer de remetre gauss en float  
.
.
.
.
ET CA MARCHE !!!!
merci a toutes les personnes qui mon repondu


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

  [C] conversion d'un double vers un float[REGLE]

 

Sujets relatifs
faire une redirection d'une popup vers la page principale??,,[php]les float !!
Comment fait ton pour avoir un float négatif???[Resolu] Ecrire dans la base de registre/conversion
Algo pour conversion Timestamp <-> Date ISOalgo de conversion d image 16 bits en 24 bits
Ou trouver un logiciel de conversion de caractères HTML ?Lien hypertext vers page Web ou email dans une page d'aide WinHelp ?
[C++] Double Buffering Win32Convertir un float en string en C++
Plus de sujets relatifs à : [C] conversion d'un double vers un float[REGLE]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR