ArbTangent/dianarudenko
ArbTangent/biryukov.andrej
f1import decimalf1import decimal
2import math2import math
33
4def pi():4def pi():
5    pi = 05    pi = 0
6    pi_tmp = 16    pi_tmp = 1
7    n = 07    n = 0
8    while abs(pi_tmp) > decimal.Decimal(10) ** (-2000):8    while abs(pi_tmp) > decimal.Decimal(10) ** (-2000):
9        pi_tmp = (-1) ** n / decimal.Decimal(decimal.Decimal(3) ** n * (2 * n + 1))9        pi_tmp = (-1) ** n / decimal.Decimal(decimal.Decimal(3) ** n * (2 * n + 1))
10        pi += pi_tmp10        pi += pi_tmp
11        n += 111        n += 1
12    return decimal.Decimal(12) ** decimal.Decimal(1 / 2) * pi12    return decimal.Decimal(12) ** decimal.Decimal(1 / 2) * pi
13A = int(input())13A = int(input())
14E = int(input())14E = int(input())
15decimal.getcontext().prec = E + 1015decimal.getcontext().prec = E + 10
16A = A * pi() / 20016A = A * pi() / 200
17sin = decimal.Decimal(0)17sin = decimal.Decimal(0)
18cos = decimal.Decimal(0)18cos = decimal.Decimal(0)
19sin_tmp = decimal.Decimal(1)19sin_tmp = decimal.Decimal(1)
20cos_tmp = decimal.Decimal(1)20cos_tmp = decimal.Decimal(1)
21n = 021n = 0
22eps = decimal.Decimal(10) ** (-2000)22eps = decimal.Decimal(10) ** (-2000)
23while abs(sin_tmp) > eps and abs(cos_tmp) > eps:23while abs(sin_tmp) > eps and abs(cos_tmp) > eps:
24    sin_tmp = decimal.Decimal(A ** (2 * n + 1)) / decimal.Decimal(math.factorial(2 * n + 1))24    sin_tmp = decimal.Decimal(A ** (2 * n + 1)) / decimal.Decimal(math.factorial(2 * n + 1))
25    cos_tmp = decimal.Decimal(A ** (2 * n)) / decimal.Decimal(math.factorial(2 * n))25    cos_tmp = decimal.Decimal(A ** (2 * n)) / decimal.Decimal(math.factorial(2 * n))
t26    if n & 1:t26    if n & 1 == 1:
27        sin -= sin_tmp27        sin -= sin_tmp
28        cos -= cos_tmp28        cos -= cos_tmp
29    else:29    else:
30        sin += sin_tmp30        sin += sin_tmp
31        cos += cos_tmp31        cos += cos_tmp
32    n += 132    n += 1
33decimal.getcontext().prec = E33decimal.getcontext().prec = E
34tang = decimal.Decimal(sin / cos)34tang = decimal.Decimal(sin / cos)
35print(tang)35print(tang)
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op