该测试在那里我有实际输出与预期输出之间的比较值时走了过来。
码:
float nf = 584227.4649743827f;
printf("Output: \t %.9f \n", nf);
输出:
Output: 584227.437500
我很清楚在我用C知识一定的差距,所以可能有人给我解释一下这种情况:
0.027474382659420f
)在打印?nf
?0.027474382659420f
的偏差丢失信息。有关这种测试问题任何其他建议将多也appriciated。
为什么会出现这种偏差(0.027474382659420f)在打印?
由于float
有大约7位数的精度,和你偏差开始在第七位。
这仅仅是印刷的限制,或者是它的浮点数据类型的限制?
它的浮点数的限制,以便还包括double
(虽然double
具有更高的精确度)。它也有二进制和十进制数之间的转换做的,所以例如0.2
是二进制表示一个循环小数(当然,二进制),所以它是犯罪嫌疑人舍入误差,也和实际上可能会变成类似0.200000000000000011
。
该值实际上是存储在变量NF?
您看到打印的一个。你最有可能指定的584227.4649743827f
甚至不会存在于你的编译程序的二进制和编译过程中,“翻译”,以实际使用的价值。
我应该如何与这样的价值观工作,所以我不喜欢分配期间有0.027474382659420f的偏差丢失信息。
使用double
,具有约15-17位的精度。此外,您还需要从f
删除584227.4649743827f
,把它变成一个double
常量。如果这不够准确,您可能需要使用外部库,而不是用于任意精度的数字,如GMP。
你浮点数最有可能坚持IEEE 754标准,但不能保证。