Programme qui convertit un nombre binaire

Fermé
fifi - 20 déc. 2007 à 17:07
 fifi - 20 déc. 2007 à 18:41
Bonjour,
je voulais faire un programme qui convertit un nombre binaire donné en virgule fixe en un nombre décimal,donc j'ai essayé d'abord de déterminer la partie entière (pe) et la partie décimale (pad) mais l'ordinateur n'a pas exécuté les calculs correctement tel que pour un nombre binaire égal à 100,1 il calcule pe=100 et pad=0,09998

#include <stdio.h>
#include <math.h>
void main()
{
int i,j,pe,ped,reste;
float n,pad;
double decimal;
printf("donner un nombre binaire\t");
scanf("%f",&n);
i=0;
pe=-1;
pd=(float)0;
while(pe<i)
{
if((n-i)<1)
{
pe=(float)i;
pad=n-(float)i;
printf("%f, %d ",pad,pe);

}
else
i++;
}
i=0;
decimal=0;
while(pe>0)
{
reste=(int)pe%10;
decimal+=(double)(reste*pow(2,i));
pe=(int)pe/10;
i++;
}
j=1;
while(pad!=0)
{
pd*=(float)10;
printf("%f\t",pad);
i=0;
ped=-1;
/*ped représente la partie décimale de la partie décimale de n multiplié par 10*/
while(ped<i)
{
if((float)(pad-i)<(float)1)
{
ped=(int)i;
pad -=(float)i;
}
else
i++;
}
decimal+=(double)(ped*pow(2,-j));
j++;
}
printf("l'équivalent du nombre binaire donné est %e\t",decimal);
}

A voir également:

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
20 déc. 2007 à 17:52
Bienvenue dans le monde merveilleux du Double, qui est incapable d'une représentation correcte et fiable de beaucoup de nombres pourtant simples... C'est comme ça que les premières versions des calculatrices Windows donnaient 100,1 - 100 = 0 !

D'ailleurs, tu ne verras jamais de type double dans un programme utilisé par des banques...

Je ne sais pas si le type decimal existe en C, mais en C# il est fiable.
1
mais le problème ne réside dans la variable décimale qui est de type double mais dans la variable pad qui est de type float
0