同样的源代码在VC++6.0和GUIDE中会有不同的结果?解决方案

同样的源代码在VC++6.0和GUIDE中会有不同的结果?
[code=C/C++][/code]
/*求100和400之间的水仙花数。正确输出结果中为153,370,和371.但是GUIDE中少了一个153*/
#include<stdio.h>
#include<math.h>
int is(int n);
int main(void)
{
int m, n;
printf("Input m:");
scanf("%d", &m);
printf("Input n:");
scanf("%d", &n);
for (m = m + 1; m <= (n - 1); m++){
if (is(m) == 1)
printf("%d\n", m);
}
return 0;
}
int is(int n){
int remainder, p, sum = 0;
p = n;
do {
remainder= n % 10;
sum = sum + pow(remainder, 3); /*这一步有问题。VC++6.0中这一步给出了警告,但是运行结果中包含了153。而GUIDE中没有警告,运行结果中只有370和371,没有153。这一步都是从double型变成int型,怎么结果不一样?*/
n = n / 10;
}
while (n != 0);
if (sum == p)
return 1;
else 
return 0;
}



------解决方案--------------------
double 到int和int到double的转换可能有精度缺失等问题.
所以,改为 sum = sum +remainder*remainder*remainder;
就比较靠谱了
------解决方案--------------------
探讨

调用pow函数进行计算的时候,它的两个参数,3和remainder都是整数,得到结果应该是小数点后有很多个0,不是?那么,在转成int型后,小数点后面的0不就会全部舍弃了吗?要真是这样的话,我觉得应该结果没有什么变化。但是不同的编译器却给出了不同的结果…