IOS 莱布尼茨公式计算圆周率π

圆周率其实就是一个圆周长与直径的比值我们通常用希腊字母π表示, 他的计算公式有多种,  其中用莱布尼茨公式是这样

 \frac{π}{4} = \frac{1}{1} -  \frac{1}{3} +   \frac{1}{5} - \frac{1}{7} + \frac{1}{9} ......  即:  \frac{π}{4} = \sum_{n=0}^∞ \frac{(-1)^n }{1 + 2n}     

如果你想知道为什么?  既然你诚心诚意的发问了,  我就大发慈悲的告诉你! 

首先看一下等比数列求和公式

S_{n}  = n_{}  \times  a_{1}  (q = 1)

S_{n}  = a_{1}  \times  \frac{1-q^n }{1-q}  = \frac{a_{1} - a_{n} \times  q }{1- q }   (q \neq 1)

那么针对于下面的等比数列, 我们先证明下这个公式

1 + x^1 + x^2 + x^3 + ... + x^n =  \frac{1-x^{n+1}}{1-x}

针对于上面公式我们可看到当n趋向于无穷大, x\in  (-1, 1) 时, 上面可以写成

1 + x + x^2 + x^3 + ... + x^n  = \frac{1}{1-x}

我们令 x = -x^2  带入上方公式可得

1 - x^2 + x^4  - x^6 + ...  =  \frac{1}{1 + x^2}

两边积分可得

 x + \frac{x^3 }{3} + \frac{x^5 }{5} + \frac{x^7 }{7}   ...  =  arctan(x)  (\tan ^{-1}  x ) 

此时, 我们将 x = 1 带入 可得

1 - \frac{1 }{3} + \frac{1 }{5} - \frac{1 }{7}   ...  =  arctan(1) = \frac{π}{4}

我们便得到了莱布尼茨公式, 但是有些心细的人可能注意到了  你 x = 1 并不在 x \in  (-1, 1) 区间啊

接下来我们就证明 当 x = 1  时 上面 收敛于arctan(1) 即可

我们现在已知 1 - x^2 + x^4  - x^6 + ...  =  \frac{1}{1 + x^2}   x \in  (-1, 1)

对于上面等比数列, 我们对 n+1 项求和可得

\frac{1-(-1)^{n+1}x^{2n+2} }{1+x^2 }  = \frac{1}{1+x^2}  即 \frac{1}{1+x^2} - \frac{(-1)^{n+1}x^{2n+2} }{1+x^2 }  = \frac{1}{1+x^2}

我们把减项移到左边可得

1 - x^2 + x^4  - x^6 + ...  +{-1}^nx^{2n}   + \frac{(-1)^{n+1}x^{2n+2} }{1+x^2 }   =  \frac{1}{1 + x^2}    x \in  (-1, 1)

我们对上面等式做 0到1上积分可得

1 - \frac{1}{3}  + \frac{1}{5} -  \frac{1}{7} + ...\frac{-1^n }{2n+1}  + (-1)^{n+1} \int_{0}^{1} \frac{x^{2n+2}}{1+x^2} dx = \frac{π}{4}

接下来我们只需证明当 n \rightarrow ∞ 最后一项为0 即可

0\leq \int_{0}^{1} \frac{x^{2n+2}}{1+x^2} dx\leq \int_{0}^{1} \ x^{2n+2} dx = \frac{1}{2n+3} \rightarrow 0

所以我们证明出π的莱布尼茨公式成立

接下来我们用OC 和 Swift 写下这个公式, 即计算下π,  两边乘4可得

π = \frac{4}{1} -   \frac{4}{3} +  \frac{4}{5} - \frac{4}{7} ....  我们可以直接对这个无穷序列进行建模, 

我们可看到 分子是4, 分母为 首项为1, 公差 为2 的等差数列,  同时还需留意每一项需要乘上 -1^n  (这里我默认首项 index为0)

OC写法:

```

- (CGFloat)calculatePi:(NSInteger)position{

    NSInteger num4 = 4;

    CGFloat series = 1;

    NSInteger pro = 1;

    CGFloat result = 0;

    for(NSInteger i = 0; i < position; i++){

        result +=  pro * (num4 / series);

        series += 2;

        pro *= -1 ;

    }

    return result;

}

```


调用, 当我们执行50000次时候

CGFloat result = [self calculatePi: 50000];

NSLog(@"返回结果: %f", result);

返回结果: 3.141573

当次数趋近无穷大时候, 结果趋近于π


Swift写法:

```

func calculatePi(position: NSInteger) -> CGFloat {

        let num4: CGFloat = 4;

        var series: CGFloat = 1;

        var pro: CGFloat = 1;

        var result: CGFloat = 0;

        for _ in 0..<position {

            result +=  pro * (num4 / series);

            series += 2;

            pro *= -1 ;

        }

        return result;

    }

```


附: 

同样执行1,000,000 次打印

swift执行速度为13s左右,  而OC执行为2分15秒左右, 可见swift运行效率非常快,  而且精度swift更高一些

OC, 可见swift运行效率更高一些

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353