C 在双精度到整数的转换上有困难

C 在双精度到整数的转换上有困难,c,C,作为ieee单点转换程序的一部分,我打算将一个0.1001ish二进制文件转换成一个数组。但是,尾数部分不正确,当使用printf检查时,结果如下所示: 10 0.101010 0 11 1.010100 1 12 0.101000 0 13 1.010000 1 14 0.100000 0 15 1.000000 0 16 10.000000 9 17 90.000000 89 18 890.000000 889 19 8889.999999 8889 20 88889.999992 8888

作为ieee单点转换程序的一部分,我打算将一个0.1001ish二进制文件转换成一个数组。但是,尾数部分不正确,当使用printf检查时,结果如下所示:

10 0.101010
0
11 1.010100
1
12 0.101000
0
13 1.010000
1
14 0.100000
0
15 1.000000
0
16 10.000000
9
17 90.000000
89
18 890.000000
889
19 8889.999999
8889
20 88889.999992
88889
21 888889.999916
888889
22 8888889.999156
8888889
23 88888889.991560
88888889
24 888888889.915602
888888889
25 8888888889.156019
-2147483648
26 88888888881.560196
-2147483648
27 888888888805.601930
-2147483648
28 8888888888046.019500
-2147483648
29 88888888880450.187000
-2147483648
30 888888888804491.870000
-2147483648
31 8888888888044909.000000
-2147483648
32 88888888880449088.000000
-2147483648
顺便说一句,这是我的代码(包括用于检查的代码)

for(int i=10;i<=32;i++)
{
    fraction=fraction*10;
    printf("%d %lf\n",i,fraction);
    checker=fraction*1;
    printf("%d\n",checker);
    if(fraction>=1)
    {
        fraction=fraction-1;
        finalresult[i]='1';
    }
    else
    {
        finalresult[i]='0';
    }
for(int i=10;i=1)
{
分数=分数-1;
最终结果[i]=“1”;
}
其他的
{
最终结果[i]=“0”;
}

我不明白为什么数字15中的整数不能从双精度中得到1。非常感谢您的帮助!

分数=分数*10;
在循环中的浮点上引入浮点累加错误。您能提供完整的程序吗?在这种情况下
如果(分数>=1)
为false,因为它显示为1,但实际上低于1。你能告诉我这个浮点累加错误吗?乘以10倍与乘以x*10倍不同。基本上,你想从右双精度中提取数字?看这里:这似乎不太容易。
分数=分数*10;
在flo上循环中的at引入浮点累加错误。您能提供完整的程序吗?在这种情况下,
如果(分数>=1)
为false,因为它显示为1,但实际上低于1。你能告诉我这个浮点累加错误吗?乘以10倍与乘以x*10倍不同。基本上,你想从右双精度中提取数字?看这里:这似乎不太容易。