Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "math"
- "math/big"
- )
- func atanStep(n int, sign int64, atan chan big.Rat) {
- y := float64(2*n + 1)
- a := big.NewRat(4, int64(math.Pow(5, y)))
- a.Sub(a, big.NewRat(1, int64(math.Pow(239, y))))
- a.Mul(a, big.NewRat(4*sign, int64(y)))
- atan <- *a
- }
- func Pi(prec int) string {
- result := big.NewRat(0, 1)
- step := int(float64(prec)/1.4 + 1)
- var sign int64 = 1
- atan := make(chan big.Rat)
- for i := 0; i <= step; i++ {
- go atanStep(i, sign, atan)
- sign *= -1
- }
- for i := 0; i <= step; i++ {
- a := <-atan
- result.Add(result, &a)
- }
- return result.FloatString(prec)
- }
- func main() {
- var n int
- fmt.Printf("Precision:")
- fmt.Scanf("%d", &n)
- fmt.Println("Pi: ", Pi(n))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement