Bonjour à tous,
Je cherche à convertir une varaible de type double en un tableau d'entier afin de pouvoir l'écrire dans une mémoire de type EEPROM sans perdre en précision. Pour cela j'ai réalisé deux fonctions de convertion (le double vers le tableau d'entier et inversement). Dans un premier temps j'ai essayé d'utiliser les oprérateurs de décalage de bits mais mon compilateur ne le prend pas en compte pour des données de type double. Je me suis orienté vers les pointeurs afin de venir récupérer dans les différentes cases mémoires les valeurs du bit de signe, de l'exposant et de la mantisse. Mais je rencontre un problème car cette méthode ne me prend pas en compte les chiffres après la virgule. Je veux dire pas la que j'arrive à convertir dans les deux sens un nombre entier (positif ou négatif) mais j'obtiens toujours des chiffres après la virgule égals à zéro à l'arrivée contrairement au départ.
Voici le code :
double *Double1,Double2,InitPointeur;
short int TabDouble2[4],TabDouble1[4];
InitPointeur = -37.5;
Double1 = &InitPointeur;
//Conversion double vers tableau d'entier
for(i=0;i<4;i++)
{
TabDouble1[i] = DoubleToInt(Double1,i);
}
//Conversion tableau d'entier vers double
Double2 = IntToDouble(TabDouble1);
short int DoubleToInt(double *DataIn,unsigned char Poids)
{
short int DataOut[4];
DataOut[0] = (short int) *DataIn;
DataOut[1] = (short int) *(DataIn+1);
DataOut[2] = (short int) *(DataIn+2);
DataOut[3] = (short int) *(DataIn+3);
switch(Poids)
{
case 0 :
return(DataOut[0]);
break;
case 1 :
return(DataOut[1]);
break;
case 2 :
return(DataOut[2]);
break;
case 3 :
return(DataOut[3]);
break;
}
}
double IntToDouble(short int DataIn[4])
{
double * DataOut;
* (DataOut) = (DataIn[0]);
* (DataOut+1) = (DataIn[1]);
* (DataOut+2) = (DataIn[2]);
* (DataOut+3) = (DataIn[3]);
return(* DataOut);
}
J'ai regardé les différentes valeurs au niveau des cases mémoires mais seulement la première me semble bonne (avec la valeur de la mantisse) mais les autres possèdent des valeurs "bizares" qui ne correspondent pas avec la thérorie (1 bit de signe, 11 bits pour l'exposant et 52 bits pour la mantisse)
Si quelques peut me venir en aide je lui en serais très reconnaissant car j'avoue avoir épuisé toute mon énergie. Si vous voulez des précisions je reste à votre disposition. Merci d'avance.