Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import numpy
- from numpy.random import rand
- import sys
- import multiprocessing
- from numexpr import evaluate
- if len(sys.argv) < 3:
- workers = 4
- else:
- workers = int(sys.argv[2])
- if len(sys.argv) < 2:
- needleCount = 30000000
- else:
- needleCount = int(sys.argv[1])
- def generateNeedles(n):
- cross = 0
- pi_x = numpy.pi/2.0
- i = 0
- k = 500000
- while n:
- if n < k:
- k = n
- n -= k
- r = rand(k+1)
- x = r[:-1]
- ct = r[1:]
- #ct = evaluate('cos(ct * pi_x) * .25')
- #cross += evaluate('(x >= 1-ct) | (x <= ct)').sum()
- cross += evaluate('(x >= 1 - cos(ct * pi_x) * .25) |'
- '(x <= cos(ct * pi_x) * .25)').sum()
- return cross
- def splitLoad(n, k):
- load, rest = divmod(n, k)
- loads = [load] * k
- loads[0] += rest
- cross = multiprocessing.Pool(k).map(generateNeedles, loads)
- return sum(cross)
- if __name__ == '__main__':
- cross = splitLoad(needleCount, workers)
- print cross, needleCount, needleCount / float(cross)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement