|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 一道计算e^n的函数题,我不知道哪里错了!!!求赐教
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1132
人关注过本帖
标题:
一道计算e^n的函数题,我不知道哪里错了!!!求赐教
只看楼主
加入收藏
lucky563591
等 级:
小飞侠
威 望:
4
帖 子:765
专家分:2103
注 册:2009-11-18
第
11
楼
收藏
得分:0
直接#include <math.h>
然后pow(e,n);不就行了?
2012-05-12 08:46
举报帖子
使用道具
赠送鲜花
xyaliner
等 级:
论坛游民
帖 子:27
专家分:35
注 册:2012-5-10
第
12
楼
收藏
得分: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
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
13
楼
收藏
得分:0
OK,你现在发现了问题所在,那么尝试下面的探讨吧:
1.当x超过12之后整数溢出,换用double来替代整数储存,其值范围比整数大得多,反正最终总是要转化为double,不如一开始就使用double。
2.测试x是多少时,double的阶乘和幂运算会溢出(阶乘好像是30多)。
3.测试项数x和精确度的关系(应该是10项左右足够了,取项数再多,精确度不会提升多少的,每增加一项,都看看结果)。
授人以渔,不授人以鱼。
2012-05-12 12:58
举报帖子
使用道具
赠送鲜花
xyaliner
等 级:
论坛游民
帖 子:27
专家分:35
注 册:2012-5-10
第
14
楼
收藏
得分: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
举报帖子
使用道具
赠送鲜花
14
2/2页
1
2
快速回复:
一道计算e^n的函数题,我不知道哪里错了!!!求赐教
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.019744 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved