Go

Go言語で円周率計算してみた(math/bigパッケージ利用)

More than 1 year has passed since last update.

円周率計算してみたかった。ちなみにテイラー展開してgoルーチン使って書いてる人はここにいるんだけど、精度がfloat64だったから…。

Go言語にはちょうどいいことに多倍長浮動小数点数パッケージがあったので使ってみた。

アルゴリズムについてはここの三つ目のオイラー加速したものを参照。

pi.go
package main

import (
    "fmt"
    "math/big"
)

func main() {
    max := int64(1000)
    two := big.NewRat(2, 1)
    pi := big.NewRat(1.0, 1.0)
    a := big.NewRat(1.0, 1.0)
    b := big.NewRat(1.0, 2.0)
    x := new(big.Rat)
    for i := int64(2); i < max; i += 2 {
        y := big.NewRat(i, i + 1)
        a.Mul(a, y)
        x.Mul(a, b)
        pi.Add(pi, x)
        b.Quo(b, two) //割り算はQuoっぽい。第二引数が0だとpanic飛ばすらしいから、それが嫌なら予め篩うかInvで逆数を求めるか…
    }
    fmt.Print(pi.Mul(pi, two).FloatString(100))
}

やっぱGo言語情報少ないな…。