菜鸟刚开始学c++,求大神看看这个代码有什么问题呢?

题目是写个代码求圆周率,lπ的计算公式如下:l其中arctan用如下形式的级数计算:l直到级数某项绝对值不大于10-15为止;π和x均为double型。我没有用答案给的方... 题目是写个代码求圆周率,
l π的计算公式如下:

l 其中arctan用如下形式的级数计算:

l 直到级数某项绝对值不大于10-15为止;π和x均为double型。
我没有用答案给的方法,数学都忘得差不多了。就想当然地写了下面这样的,求大神指点。

#include "stdafx.h"
#include<iostream>
using namespace std;
double arctan(double x);
double power(double y,int n);
int _tmain(int argc, _TCHAR* argv[])
{
int PI=0;
PI=16*arctan(1/5)-4*arctan(1/239);
cout<<PI<<endl;
return 0;
}
double arctan(double x)
{
double sum=0;
for(int i=0;power(x,2*i+1)/(2*i+1)<=1/power(10,15);i++)
sum+=(power(-1,i))*(power(x,2*i+1)/(2*i+1));
return sum;
}
double power (double y,int n)
{
double val=1.0;
while(n--)
val*=y;
return val;
}
展开
 我来答
电灯剑客
科技发烧友

2016-08-02 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:1.2万
采纳率:83%
帮助的人:4913万
展开全部

撇开效率和精度不谈,程序本身有三处错

  1. int PI=0;

    int应该改成double

  2. PI=16*arctan(1/5)-4*arctan(1/239);

    1/5和1/239是整数除法,结果都是0,应该用实数除法,比如1.0/5.0

  3. for(int i=0;power(x,2*i+1)/(2*i+1)<=1/power(10,15);i++)

    中间的<=改成>=,因为通项足够小是停机条件,而不是循环执行的条件

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式