LoginSignup
2
1

More than 5 years have passed since last update.

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

Posted at

円周率計算してみたかった。ちなみにテイラー展開して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言語情報少ないな…。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1