| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1132 人关注过本帖
标题:一道计算e^n的函数题,我不知道哪里错了!!!求赐教
只看楼主 加入收藏
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:0 
直接#include <math.h>
然后pow(e,n);不就行了?
2012-05-12 08:46
xyaliner
Rank: 2
等 级:论坛游民
帖 子:27
专家分:35
注 册:2012-5-10
收藏
得分:0 
回复 11楼 lucky563591
首先,计算e^n在数学函数里有exp(),系统是无法识别pow(e,n)里的e的;
然后这是为了检验是不是这个多项式的值溢出:1+n+n^2/(2!)+n^3/(3!)+……+n^x/(x!)。
2012-05-12 09:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
OK,你现在发现了问题所在,那么尝试下面的探讨吧:
1.当x超过12之后整数溢出,换用double来替代整数储存,其值范围比整数大得多,反正最终总是要转化为double,不如一开始就使用double。
2.测试x是多少时,double的阶乘和幂运算会溢出(阶乘好像是30多)。
3.测试项数x和精确度的关系(应该是10项左右足够了,取项数再多,精确度不会提升多少的,每增加一项,都看看结果)。

授人以渔,不授人以鱼。
2012-05-12 12:58
xyaliner
Rank: 2
等 级:论坛游民
帖 子:27
专家分:35
注 册:2012-5-10
收藏
得分:0 
回复 13楼 TonyDeng
嗯嗯,当我用double代替整数储存后再测试,发现:  
    1、当x>=647时,溢出;
    2、当x<8时,结果精度随x的增大而增高;当x>=8且x<=16时,精度有小幅度提升;当x>16时,x已经对计算值的小数点前6位(即取8位有效数字:20.085537)无影响。
   
     因此结论是:在计算n^x和x!时,计算值超出了int型变量的最大取值范围而溢出,导致最终结果的错误。
                                          感谢大大更进一步的指导!!!

[ 本帖最后由 xyaliner 于 2012-5-13 00:26 编辑 ]
2012-05-13 00:12
快速回复:一道计算e^n的函数题,我不知道哪里错了!!!求赐教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019744 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved