用arctan公式,求圆周率π的值(使用C++)

π的计算公式:

   \pi = 16\times arctan(\frac{1}{5})-4\times arctan(\frac{1}{239})

虽然,C++里面有关于arctan的系统函数公式,但这篇文章不使用该方法。

arctanx=x-\frac{x^{3}}{3}+\frac{x^{5}}{5}-\frac{x^{7}}{7}+......

直到级数某一值不大于10^{-15}为止。

只要用数学算法转换为计算机执行的步骤就可以了。对于初学者来说,如果认为太麻烦了,可以使用功能分解的方法解决。用不同的函数实现不同的功能,从而实现逐步简化。

double arctan(double x) {
    double sqr = x * x;
    double e = x;
    double r = 0;
    int i = 1;
    while (e / i > 1e-15) {
        double f = e/i;
        r = (i % 4 == 1) ? r + f : r - f;
        e = e * sqr;
        i += 2;
    }
    return r;
}

arctanx=x-\frac{x^{3}}{3}+\frac{x^{5}}{5}-\frac{x^{7}}{7}+......

sqr 代表平方,用来调整分子的每一次变换。

e 代表每一个分子。

r 用来把接收到的每一次带正负的 f 累加起来。直到 f 的绝对值小于1e-5为止。

i 代表分母。

f 代表每一项的绝对值。

至于为什么在判断时候不写成下面这样:那是因为 f 在大括号内定义的,它的作用于在大括号内。

此时,f 下面出现了波浪线,是未知量。那么,可以这样改:

如果写成while 形式,则必须使 f 的初始化为 e / i ,否则,while (0>1e-15)为假,运行结果为零。

千万不要忘了,后面要改变 f 的值,它随着新的e,i而改变。

1e-15 代表指数: 10^{-15},是循环截止的标志。

i%4 == 1 用来判断正负号

        求余若为 1 则为正号,如5,9......

        求余若为 3 则为负号,如3,7.......

r 用来累加。返回arctan最后结果。

全部代码:

#include <iostream>
using namespace std;
double arctan(double x){
    double sqr = x * x;
    double e = x;
    double r = 0;
    int i = 1;
    while (e / i > 1e-15) {
        double f = e / i;
        r = (i % 4 == 1) ? r + f : r - f;
        e = e * sqr;
        i += 2;
    }
    return r;
}
int main() {
    double a = 16.0 * arctan(1 / 5.0);
    double b = 4.0 * arctan(1 / 239.0);
    cout << "PI = " << a - b << endl;
    return 0;
}

主函数里面,a与b的结果,若整数相除结果取整,所以要把除数或被除数其中一个加上小数点。

arctan带入的数同理。

运算结果:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值