// Concurrent computation of pi. // The implementation uses the Nilakantha Series. // // This demonstrates Go's ability to handle // large numbers of concurrent processes. // It is an unreasonable way to calculate pi. package main import ( "fmt" "math" ) func main() { fmt.Println(" math.Pi:", math.Pi) fmt.Println("Nilakantha Series:", pi(5000)) } // pi launches n goroutines to compute an // approximation of pi. func pi(n int) float64 { ch := make(chan float64) for k := 0; k < n; k++ { go term(ch, float64(k)) } f := 3.0 for k := 0; k < n; k++ { f += <-ch } return f } func term(ch chan float64, k float64) { ch <- 4 * math.Pow(-1, k) / ((2*k + 2) * (2*k + 3) * (2*k + 4)) }