Python | Почему тангенс π/2 = 1.633123935319537e+16?
Почему тангенс π/2 = 1.633123935319537e+16?
Код:
import math
print(math.tan(math.pi / 2))
Результат: 1.633123935319537e+16
Ответы (2 шт):
потому что pi - это 180 градусов, pi / 2 - это 90 градусов, а тангенс стремится к бесконечности при стремлении к 90 градусам
кроме того тангенс - это синус делить на косинус, а точность float значений все таки не абсолютная, поэтому деление на 0 может и не происходить, поэтому могут получаться какие-то конечные значения
ну и в третьих синус, косинус, тангенс и т.д. можно вычислять (а возможно так и вычисляются) как ряд тейлора
а значит учитывая точность float будет лишь приближенное значение и в вашем случае это 1.633123935319537e+16
кстати из-за алгоритма вычисления тригонометрических функций и cos(math.pi / 2) равен не 0, а 6.123233995736766e-17
P.S.
попробовал подсчитать cos(pi / 2) через ряд Тейлора:
import math
value = math.pi / 2
res = 0
for i in range(50):
res += (-1)**i * (value**(2*i + 1) / math.factorial(2 * i))
print(res)
Вместо 0 получил 1.2246167519384833e-16 как и ожидалось
Вот график значений lg(|cos(x)|) (для удобства взял логарифмическую шкалу, чтобы лучше показать) от кол-ва шагов вычисления - видно, что после 10 шага точность не меняется (достигли предела точности чисел с плавающей запятой):
Можно использовать более точные библиотеки, например:
from sympy import pi, tan
print(tan(pi / 2))
Вывод:
zoo (complex infinity)

