0

我看到以下代码产生如下结果,知道为什么输出是这样的吗?

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

2 回答 2

2

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

而且,即使它们可以pow被精确地表示,你也可能会因为可能在循环中工作的东西而得到不好的结果。换句话说,无论一个操作的错误多么小,如果你做很多次,错误就会变大。

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

对于它的价值,在 CygWin 下的 gcc 3.4.4 下会产生正确的结果,因此您可能使用的是不太精确的pow.

于 2010-08-18T06:36:25.740 回答
2

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

于 2010-08-18T06:22:54.623 回答