读书人

运行结果与理论值不符?解决思路

发布时间: 2012-02-23 22:01:35 作者: rapoo

运行结果与理论值不符?
求立方运算的练习:

# 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.
为什么呢?

[解决办法]
是因为舍入误差.
注意pow的返回值是double型.实现pow(m,n)时,并不是把m数乘n次得到的(n可能是个小数,再者当n很大时效率很成问题), 而是通过对数-指数运算. 这样作的一个后果是有误差,即使m,n都是整数,返回值也可能不是整数
在你的例子中,在gcc中pow(5,3)的返回值可能是124.999999之类,而把它赋给int型result后,小数部分被忽略,就成了124
[解决办法]
result=pow(num,3);
改为
result=ceil(pow(num,3));

[解决办法]
int cube(int num)
{
return num*num*num; //既然是写函数,就不要调用库函数了
}
[解决办法]
尽量不要使用隐式转换,如果不得不用,需要要非常小心!

读书人网 >C语言

热点推荐