-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpi.py
More file actions
56 lines (42 loc) · 1.39 KB
/
pi.py
File metadata and controls
56 lines (42 loc) · 1.39 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#
# Calculate pi
# Author - Phil Hall, October 2022
# License - MIT
#
import decimal
import random
import time
square = decimal.Number(0)
circle = decimal.Number(0)
two_one = decimal.Number(2.1)
one_05 = decimal.Number(1.05)
one = decimal.Number(1)
begin = time.time()
loops = 0
end = time.time()
while end - begin < 60.0 * 60.0 * 72.0:
x_coordinate = decimal.Number(random.random())
y_coordinate = decimal.Number(random.random())
x_coordinate = decimal.multiply(x_coordinate, two_one)
y_coordinate = decimal.multiply(y_coordinate, two_one)
x_coordinate = decimal.subtract(x_coordinate, one_05)
y_coordinate = decimal.subtract(y_coordinate, one_05)
x_coordinate = decimal.absolute(x_coordinate)
y_coordinate = decimal.absolute(y_coordinate)
if x_coordinate <= one and y_coordinate <= one:
x_coordinate = decimal.multiply(x_coordinate, x_coordinate)
y_coordinate = decimal.multiply(y_coordinate, y_coordinate)
if decimal.add(x_coordinate, y_coordinate) <= one:
circle = decimal.add(circle, one)
square = decimal.add(square, one)
end = time.time()
loops += 1
if loops % 1000 == 0:
print(circle, square , end - begin, end = ' \r')
if loops > 100000000000:
loops = 0
print("")
print("dividing")
pi = decimal.divide(circle, square, 45)
pi = decimal.multiply(pi, decimal.Number(4))
print(pi)