mirror of
https://github.com/Balshgit/different
synced 2025-09-11 02:50:41 +03:00
count PI number in threaded version
This commit is contained in:
commit
f377b52acf
47
threaded_PI_count_script.py
Normal file
47
threaded_PI_count_script.py
Normal file
@ -0,0 +1,47 @@
|
||||
from typing import Dict
|
||||
import random
|
||||
from datetime import datetime
|
||||
from multiprocessing import Pool
|
||||
|
||||
|
||||
ACCURACY = 10 ** 8 # our ACCURACY to count PI
|
||||
PROC_NUMBER = 5
|
||||
|
||||
|
||||
def dots_in_circle(n: int) -> Dict[str, int]:
|
||||
|
||||
inside, outside, one = 0, 0, 0
|
||||
for step in range(int(ACCURACY*n/PROC_NUMBER), int(ACCURACY*(n+1)/PROC_NUMBER)):
|
||||
x = random.randint(0, ACCURACY)/ACCURACY # 0 < x < 1
|
||||
y = random.randint(0, ACCURACY)/ACCURACY # 0 < y < 1
|
||||
|
||||
# dot inside circle or outside it
|
||||
if x**2 + y**2 < 1:
|
||||
inside += 1
|
||||
elif x**2 + y**2 == 1:
|
||||
one += 1
|
||||
else:
|
||||
outside += 1
|
||||
print(f'dots inside: {inside}, all dots: {outside}', f'On line: {one}')
|
||||
return {'inside': inside, 'outside': outside, 'ONE': one}
|
||||
|
||||
|
||||
now = datetime.now()
|
||||
|
||||
nums = range(0, PROC_NUMBER)
|
||||
|
||||
processes = Pool(processes=PROC_NUMBER)
|
||||
all_dots = processes.map(dots_in_circle, nums)
|
||||
processes.close()
|
||||
|
||||
dots_inside_circle, dots_outside_circle, dots_on_circle_line = 0, 0, 0
|
||||
|
||||
for item in all_dots:
|
||||
dots_inside_circle += item["inside"]
|
||||
dots_on_circle_line += item["ONE"]
|
||||
dots_outside_circle += item["outside"]
|
||||
|
||||
end = datetime.now()
|
||||
print('execution time (seconds):', (end-now).seconds)
|
||||
print(f'dots inside: {dots_inside_circle}, dots outside: {dots_outside_circle}, On line: {dots_on_circle_line}')
|
||||
print(dots_inside_circle/ACCURACY*4)
|
Loading…
x
Reference in New Issue
Block a user