Python

Нахождение синуса от угла в радианах

Помогите найти формулу для того чтобы создать фунцию в питоне для нахождения синуса от числа ( угла в радианах),чтобы потом использовать в решении.это задание от препода на знание функций по этому нельзя использовать модуль math.
 def sin(x):
s, t, q, n = x, x, -x * x, 1
while True:
n += 2
t *= q / (n * (n - 1))
s += t
if abs(t) < 1.0e-20: return s
Банальный ряд Тейлора.

Но т.к. при больших x вычисление ряда начинает безбожно врать, имеет смысл сначала привести x к приемлемому диапазону значений - через формулы синуса и косинуса двойного угла:
 def sin(x):
if abs(x) > 0.125: return 2 * sin(x / 2) * cos(x / 2)
s, t, q, n = x, x, -x * x, 1
while True:
n += 2
t *= q / (n * (n - 1))
s += t
if abs(t) < 1.0e-20: return s

def cos(x):
if abs(x) > 0.125: return cos(x / 2) ** 2 - sin(x / 2) ** 2
s, t, q, n = 1, 1, -x * x, 0
while True:
n += 2
t *= q / (n * (n - 1))
s += t
if abs(t) < 1.0e-20: return s
Убирая дублирование кода и добавляя кэширование (мемоизацию) для ускорения рекурсии:
 import functools

@functools.lru_cache
def calc(t, q, n):
s = t
while True:
n += 2
t *= q / (n * (n - 1))
s += t
if abs(t) < 1.0e-20: return s

@functools.lru_cache
def sin(x):
return 2 * sin(x / 2) * cos(x / 2) if abs(x) > 0.125 else calc(x, -x * x, 1)

@functools.lru_cache
def cos(x):
return cos(x / 2) ** 2 - sin(x / 2) ** 2 if abs(x) > 0.125 else calc(1, -x * x, 0)
МА
Максим Ахмадуллин
71 614
Лучший ответ
Евгений Андреев спасибо огромное!
Через ряд Тейлора разложи: https://dotancohen.com/eng/taylor-sine.php
Если под виндой - можешь подрубить MSVCRT.DLL, там тоже синус есть. И никакого модуля math, что характерно!