summary refs log tree commit diff stats
path: root/tests/parallel/tpi.nim
blob: cd965d585fda93d57d727b1edb33b86c80be8b07 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
discard """
  matrix: "--mm:refc"
  output: '''3.141792613595791
3.141792613595791'''
"""

import strutils, math, threadpool

proc term(k: float): float = 4 * math.pow(-1, k) / (2*k + 1)

proc piU(n: int): float =
  var ch = newSeq[FlowVar[float]](n+1)
  for k in 0..ch.high:
    ch[k] = spawn term(float(k))
  for k in 0..ch.high:
    result += ^ch[k]

proc piS(n: int): float =
  var ch = newSeq[float](n+1)
  parallel:
    for k in 0..ch.high:
      ch[k] = spawn term(float(k))
  for k in 0..ch.high:
    result += ch[k]

echo formatFloat(piU(5000))
echo formatFloat(piS(5000))