数据类型动动手第0题疑惑
小甲鱼的代码#include <stdio.h>
#include <math.h>
int main()
{
int result;
result = pow(1, 2) + pow(2, 3) + pow(3, 4) + pow(4, 5) + pow(5, 6);
printf("结果是:%d\n", result);
return 0;
}
我想使用for循环做,我的代码
int main()
{
int num,i;
int j=2;
int number = 0;
for (i=1;i<6;i++)
{
num = pow(i,j);
j += 1;
number = number + num;
}
printf("%d\n", number);
return 0;
}
小甲鱼代码的结果是16739,而我的代码结果是16738 ,比预期结果少了1,我打印for循环中的 i,j 和num 结果,发现在i,j是 5,6 ,也就是pow(5,6) 的结果是15624 , 比原单独求得结果15625 少了一
请问为什么最后会出现这个问题,我在循环外求 pow(5,6) 得结果又是正确得15625 . 因为还是刚学没学到for 循环.不知道c语言中for 循环是不是有什么特性导致最后一次求值-1 本帖最后由 -这- 于 2021-12-27 09:36 编辑
{:10_254:}主要有疑问是因为我用python 写了一模一样结构得代码,发现输出值是没有问题得,我打印prinf("%d-%d0-%d",i,j,num),得出的结果是 5-6-15624,这一步就出现问题了 我试了你的代码,完全没有问题啊。
答案是 16739,而且在 for 循环里面 pow 正常运行。
我也不知道为什么 傻眼貓咪 发表于 2021-12-27 09:39
我试了你的代码,完全没有问题啊。
答案是 16739,而且在 for 循环里面 pow 正常运行。
我也不知道为什么
{:10_266:}难道是人品问题吗,我试了好几次都是这样,我还以为试特性呢
不知道是不是因为 pow() 是 double 类型,而你的 num 是整型,因编译器不同,影响了结果? 傻眼貓咪 发表于 2021-12-27 09:46
不知道是不是因为 pow() 是 double 类型,而你的 num 是整型,因编译器不同,影响了结果?
好像是的,我换了一个软件,重新编译后又是正确答案了
我是 codeblocks 17.12 的,请问下如何设置编译器,每个软件的编译器都是不同的,难道后面我得使用两个编译器才能知道正确答案吗 codeblocks 我没用过,我不会设置,会不会是需要更新?
但是一般程序语言对于浮点类型精度都是弱项.... 傻眼貓咪 发表于 2021-12-27 09:57
codeblocks 我没用过,我不会设置,会不会是需要更新?
但是一般程序语言对于浮点类型精度都是弱项....
但是还是有个疑惑 , 我在循环外重新定义num变量的值 num = pow(5,6),上面的类型我都没改变,打印num的结果后是正确的,并没有-1 , 同时在for循环中 前面几个pow的结果都是正确的,唯独最后一个参数pow导致结果-1 ,按照编译器的不同,那么请问for循环最后一次的结果在编译器中是特例的吗 确实很奇怪,我也不知道。
如果只是循环一次呢?在循环里面用 pow(5, 6) 试试 学习代码了
页:
[1]