| // Concurrent computation of pi. |
| // See http://goo.gl/ZuTZM. |
| // |
| // 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(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 := 0.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 + 1) |
| } |