运行结果与理论值不符?

mencius0235 2007-04-26 01:24:26
求立方运算的练习:

# include <stdio.h>
# include <math.h>

int cube(int num)
{
int result;

result=pow(num,3);

return result;
}

int main()
{
int num,answer;

do
{
printf("\n 请输入一个整数:");
scanf("%d",&num);

answer=cube(num);

printf("\n\n %d 的立方为: %d",num,answer);
}while(num!=0);
return 0;
}

编译运行后输入"5",得到输出是124.
为什么呢?
...全文
214 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2007-04-26
  • 打赏
  • 举报
回复
尽量不要使用隐式转换,如果不得不用,需要要非常小心!
jixingzhong 2007-04-26
  • 打赏
  • 举报
回复
int cube(int num)
{
return num*num*num; //既然是写函数,就不要调用库函数了
}
mymtom 2007-04-26
  • 打赏
  • 举报
回复
result=pow(num,3);
改为
result=ceil(pow(num,3));
deng2000 2007-04-26
  • 打赏
  • 举报
回复
是因为舍入误差.
注意pow的返回值是double型.实现pow(m,n)时,并不是把m数乘n次得到的(n可能是个小数,再者当n很大时效率很成问题), 而是通过对数-指数运算. 这样作的一个后果是有误差,即使m,n都是整数,返回值也可能不是整数
在你的例子中,在gcc中pow(5,3)的返回值可能是124.999999之类,而把它赋给int型result后,小数部分被忽略,就成了124
mencius0235 2007-04-26
  • 打赏
  • 举报
回复
没看错哦,是用gcc编译的。
试了下vc6就没这个问题,晕...怎么回事
Estfania 2007-04-26
  • 打赏
  • 举报
回复
没错啊,是不是看错了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧