C中浮点型的大号商店

时间:2012-01-19 01:41:21

标签: c

我得到的问题是,如果我为浮动类型分配一个大数字,例如float f = 1.0e20,然后我用printf("f = %f\n",f)将其打印到屏幕上,然后在屏幕上显示f = 100000002004087730000.000000 100000000000000000000.000000 1}}。谁能告诉我为什么数字显示不是{{1}}。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您使用的号码在您存储的类型中没有确切的表示。因此,答案永远不会完全正确。

通过类比,考虑使用6位十进制数字的计算机。您可以为1/3做的最好的事情是.333333但是3 * (1/3) != 1。哦,好吧。

那么2/3呢?如果您使用.666667,请2/3 != 2 * (1/3)。如果您使用.666666,请1/3 + 2/3 != 1。哦,好吧。

这就是浮点数的方式。

答案 1 :(得分:0)

总结,浮点变量表示为固定数的 aproximation ,稍后用指数缩放。在您的情况下,数字太大,无法以准确的方式存储。请尝试使用double,然后使用%lf打印出来。它会更准确,但不要指望真正的平等。