C的pow()函数根据头文件无法正常工作

我看到以下代码生成如下结果,任何关于为什么输出都是这样的想法?

#include  #include  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 

在转换为int之前使用round()函数,否则尾部数字将被截断。

正如关于浮点数的其他十几个问题中的每一个问题一样:-),答案是并非所有数字都可以准确表示。

并且,即使它们可以被表现得很苛刻,你也可能会从像pow这样的东西中得到一个糟糕的结果,这可能在一个循环中起作用。 换句话说,无论操作上的错误有多小,如果你多次执行,错误就会变大。

尝试使用%.50f或其他浮点说明符打印出pow(10,4)的返回值,我保证你会看到9999.9999999237623465而不是10000

对于它的价值,在CygWin下的gcc 3.4.4下产生了正确的结果,所以很可能你使用的是不太精确的pow实现。