需要实现的功能: 输入示例- 101.101 输出结果- 5.625
我编写了一个浮点二进制-十进制转换器,但有一个小错误 - 输出结果不准确。
我的代码实现: 输入- 101.101 输出- 5.624985
当我将计数从-16更改为-32时,我的代码如何运行:
输入- 101.101 输出- 5.625000 这是正确的。
输入- 101.111 输出- 5.875061 仍然不准确,应该是5.875。
#include <stdio.h>
double decimal(double decpart);
long int integer(long int intpart);
int main(int argc, const char * argv[])
{
double x;
scanf("%lf", &x);
long int intpart = (long int)x;
double decpart = x-intpart;
double finint = integer(intpart);
double findec = decimal(decpart);
double finnum = findec + finint;
printf("%lf\n",finnum);
return 0;
}
long int integer(long int intpart)
{
double sum = 0;
long int a, b, p= 0;
while(intpart>0)
{
a = intpart % 10;
b = a*(pow(2, p));
sum = sum + b;
p++;
intpart = intpart / 10;
}
return sum;
}
double decimal(double decpart)
{
double sum = 0;
int count = 0;
while (decpart > 0 && count > -32)
{
count--;
decpart = decpart*10;
if (decpart >= 1)
{
decpart = decpart - 1;
sum = sum + pow(2, count);
}
}
return sum;
}
double
中,但是double
不是十进制的。更容易的方法是将二进制字符串读入一个long
中,同时忽略小数点,然后使用小数点的位置来计算ldexp
的第二个参数。 - Potatoswatter