我已经用C语言编写了一个程序,将以二进制形式表示的浮点数(1101.11)转换为十进制数(
13.75
)。但是,我好像无法从算法中得到正确的值。如何才能正确地将二进制浮点数转换为十进制数?我正在使用Dev CPP编译器(32位)。以下是算法的定义:void b2d(double p, double q )
{
double rem, dec=0, main, f, i, t=0;
/* integer part operation */
while ( p >= 1 )
{
rem = (int)fmod(p, 10);
p = (int)(p / 10);
dec = dec + rem * pow(2, t);
t++;
}
/* fractional part operation */
t = 1; //assigning '1' to use 't' in new operation
while( q > 0 )
{
main = q * 10;
q = modf(main, &i); //extration of frational part(q) and integer part(i)
dec = dec+i*pow(2, -t);
t++;
}
printf("\nthe decimal value=%lf\n",dec); //prints the final output
}
int main()
{
double bin, a, f;
printf("Enter binary number to convert:\n");
scanf("%lf",&bin);
/* separation of integer part and decimal part */
a = (int)bin;
f = bin - a;
b2d(a, f); // function calling for conversion
getch();
return 0;
}
printf("%f", ...)
的默认精度为6位小数。如果第6位小数以下存在不精确情况(提示:是有的),你将看不到它。在输入后立即尝试printf("%.24f\n", bin)
。 - Useless