运行结果与理论值不符?
求立方运算的练习:
# 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; //既然是写函数,就不要调用库函数了
}
[解决办法]
尽量不要使用隐式转换,如果不得不用,需要要非常小心!