有一个无法理解的时刻,在float类型变量的输出。
#include <stdio.h>
int main(void) {
float a = 123456789;
printf("%f",a);
return 0;
}
以下代码我认为应该输出123456789,然而,在实际情况下它输出123456792.000000。如果你尝试输入一些更简单的东西,比如900000008,那么最后一个数字8就消失了。如果你对int类型做同样的事情,一切都会完美显示。请告诉我问题是什么?
问题是在它的 4 个字节中,这种类型不仅必须包含值,还必须包含指数。粗略地说,里面的表示
float
就是投射到范围 [0,1) 的值和指数。这不足以准确表示。(免责声明:对于行家 - 是的,我知道,这是一个非常近似的解释,关于正常和规范化形式等等......我认为不需要告诉所有这些来回答所提出的问题)
通常 - 不要试图根据定义用近似浮点数替换精确整数......
例如,看这里 - https://habrahabr.ru/post/112953/