| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1710 人关注过本帖
标题:这个球arctan()的函数怎么错了呢?
只看楼主 加入收藏
slash5999
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-11-28
结帖率:60%
收藏
已结贴  问题点数:17 回复次数:3 
这个球arctan()的函数怎么错了呢?
arctanx=x-x^3/3+x^5/5-x^7/7+.....
直到级数某项绝对值不大于1e-15为止

我的代码如下
#include <iostream>
#include <cmath>
using namespace std;
double power(double x,int n)
{double val=1.0;
while(n--)
val*=x;
return val;
}


double arctan(double x)
{
    long int p=1;
    double a=x;
    double sum=0;

    long int t=0;
    while(abs(a)>=1e-15)
    {

        a=power(x,p)/p;
        sum+=a*(power(-1,t));
        t++;
        p+=2;
    }
    return sum;
}


int main()
{
    cout<<arctan(1.0);
    return 0;
}


按理说应该输出0.785
而我的程序输出的是:0.6666
请问我的程序在哪里出了问题?
搜索更多相关主题的帖子: long include double return 
2013-05-04 12:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:17 
看了一下你的代码,除了效率极低外,倒也没什么逻辑错误。
另外,“直到级数某项绝对值不大于1e-15为止”,其中x为1.0是,也就是某项为 1/1e15 时,你得算到 五百万亿 次才结束。我不知道你运行了多久就有了“而我的程序输出的是:0.6666”?
2013-05-04 12:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
哦,还有一个最严重的问题,既然需要某项小于 1/1e15,那么那时你的 p(类型是long int) 已经早就溢出了
2013-05-04 12:25
slash5999
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-11-28
收藏
得分:0 
恩,我懂了,谢谢!
2013-05-05 15:38
快速回复:这个球arctan()的函数怎么错了呢?
数据加载中...
 
   



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

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