注册 登录
编程论坛 C++教室

圆周率PI

tfg0116 发布于 2008-11-02 20:40, 808 次点击
//这是一个求圆周率PI的程序,没有错误但是运行结果不对,请帮忙看一下
#include<iostream.h>
#include<math.h>

double arctan(double x);
int main()
{
    double a;
    double b;
    a = 16.0 * arctan(1 / 5.0);
    b = 4.0 * arctan(1 / 239.0);
    cout<<"PI= "<<a-b<<endl;
    return 0;
}
double arctan(double x)arctanx=x-x3/3+x5/5-x7/7+.....由于没公式编译器,所以把x的几次方直接这么写了
{
    double result = 0.0;
    double sqr = x * x;
    double num = x;//fenzi
    int den = 1;//fenmu
    double f = num / den;
    int flag = -1;
    while(abs(f) > 1e-15)
    {
        result += f;
        num = num * sqr * flag;
        den += 2;
        f = num / den;
    }
    return result;
}
2 回复
#2
tfg01162008-11-02 20:56
我知道哪错了,我自己重新编写了一个绝对值函数,结果正确,为什么math.h头文件下的abs不行呢。正确为:
#include<iostream>
//#include<math.h>
using namespace std;

double arctan(double x);
double abs(double a);
int main()
{
    double a;
    double b;
    //double arctan(double x);
    a = 16.0 * arctan(1 / 5.0);
    b = 4.0 * arctan(1 / 239.0);
    cout<<"PI= "<<a-b<<endl;
    return 0;
}
double arctan(double x)
{
    double result = 0.0;
    double sqr = x * x;
    double num = x;//fenzi
    int den = 1;//fenmu
    double f = num / den;
    int flag = -1;
    while(abs(f) > 1e-15)
    {
        result += f;
        num = num * sqr * flag;
        den += 2;
        f = num / den;
    }
    return result;
}
double abs(double a)
{
    return a > 0 ? a : -a;
}
#3
tfg01162008-11-02 21:00
换成fabs就ok了,呵呵
#include<iostream>
#include<math.h>
using namespace std;

double arctan(double x);
double abs(double a);
int main()
{
    double a;
    double b;
    //double arctan(double x);
    a = 16.0 * arctan(1 / 5.0);
    b = 4.0 * arctan(1 / 239.0);
    cout<<"PI= "<<a-b<<endl;
    return 0;
}
double arctan(double x)
{
    double result = 0.0;
    double sqr = x * x;
    double num = x;//fenzi
    int den = 1;//fenmu
    double f = num / den;
    int flag = -1;
    while(fabs(f) > 1e-15)
    {
        result += f;
        num = num * sqr * flag;
        den += 2;
        f = num / den;
    }
    return result;
}
//double abs(double a)
//{
//    return a > 0 ? a : -a;
//}
1