首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-23 
运行结果与理论值不符?求立方运算的练习:#includestdio.h#includemath.hintcube(intnum){intresultre

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

#   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; //既然是写函数,就不要调用库函数了
}
[解决办法]
尽量不要使用隐式转换,如果不得不用,需要要非常小心!

热点排行