#include <stdio.h>
#include <math.h>
int main()
{
int loop, place_value=0, c = 5;
for(loop = 0; loop < c; loop++)
{
place_value = 0;
place_value = pow(10, loop);
printf("%d \n", place_value);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码给出
10
99
1000
9999
Run Code Online (Sandbox Code Playgroud)
为什么第 3 行和第 5 行分别是 99 和 9999 而不是 100 和 10000?
正常求电时,给出正确答案。
#include <stdio.h>
#include <math.h>
int main()
{
printf ("%d", (int) pow (10,3 ));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
1000
Run Code Online (Sandbox Code Playgroud)
pow是一个难以实现的例程,并不是所有的实现都能给出好的结果。粗略地说,核心算法pow(x, y)从 计算对数(的一部分)x,乘以y,然后计算乘积的指数函数。在浮点中执行此操作会引入难以控制的舍入误差。
结果是 的计算结果pow(10, 4)可能接近 10,000,但略小或略大。如果小于,则将其转换为整数会产生 9999。
当您在源代码中使用硬编码的参数时,编译器可能会在编译期间计算答案,可能使用不同的算法。例如,当y是 3 时,它可以简单地将第一个参数自乘,如x*x*x,而不是使用对数指数算法。
至于为什么您测试的奇数会出现低结果,请考虑当我们将 5.45454545 乘以 10 的各种幂并四舍五入为整数时会发生什么。5.45454545 向下舍入为 5。54.5454545 向上舍入为 55。545.454545 向下舍入为 545。向上或向下舍入是小数点以外的小数部分的结果。对于您的情况pow(10, loop),10 的对数位可能恰好用您尝试过的几个奇数给出了这种模式。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |