我看到以下代码产生如下结果,任何关于为什么输出都是这样的想法?
#include <stdio.h>
#include <math.h>
int main() {
int i = 0;
for(i = 0; i < 10; i++) {
printf("%d\t\t\t%d\t\t\t", i, (int)pow(10, i));
printf("%f\n", pow(10, i));
}
return 0;
}
输出:
0 1 1.000000
1 10 10.000000
2 99 100.000000
3 1000 1000.000000
4 9999 10000.000000
5 100000 100000.000000
6 1000000 1000000.000000
7 9999999 10000000.000000
8 99999999 100000000.000000
9 999999999 1000000000.000000
答案 0 :(得分:2)
在转换为round()
之前使用int
函数,否则尾随数字将被截断。
答案 1 :(得分:2)
正如关于浮点数的其他十几个问题中的每一个一样:-),答案是并非所有数字都可以准确表示。
而且,即使他们可以表现出来,也可能会因为pow
之类的问题而导致错误的结果。换句话说,无论操作上的错误有多小,如果你多次执行,错误就会变大。
尝试使用pow(10,4)
或其他浮点指示符打印%.50f
的返回值,我保证您会看到类似9999.9999999237623465
而不是10000
的内容
对于它的价值,在CygWin下的gcc 3.4.4下生成了正确的结果,因此您可能使用的是pow
的不太精确的实现。