运行以下代码行时:
int i,a;
for(i=0;i<=4;i++)
{
a=pow(10,i);
printf("%d\t",a);
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶地看到输出,它出来了 1 10 99 1000 9999而不是1 10 100 1000 10000.
可能的原因是什么?
注意
如果您认为它是浮点不准确,在上面的for循环中i = 2,存储在变量中的值a是99.
但如果你写的话
a=pow(10,2);
Run Code Online (Sandbox Code Playgroud)
现在a的价值出现了100.怎么可能?
小智 17
我甚至不能拼写c,但我可以告诉你原因.
你已经a成为了一个int.pow()生成一个浮点数,在某些情况下可能只是一个小于100或10000的头发(正如我们在这里看到的那样).
然后你将它填入整数,TRUNCATES为整数.所以你失去了那个小部分.哎呀.如果您确实需要整数结果,则round可能是执行该操作的更好方法.
即使在那里也要小心,因为足够大的功率,错误实际上可能足够大,仍然会导致失败,给你一些你不期望的东西.请记住,浮点数只能带来如此高的精度.
Lee*_*ker 11
该函数pow()返回一个double.您将其分配给a类型的变量int.这样做不会"舍入"浮点值,它会截断它.所以pow()返回类似于99.99999的东西...为10 ^ 2,然后你只是扔掉.9999 ...部分.更好的说法a = round(pow(10, i)).