Python | Почему тангенс π/2 = 1.633123935319537e+16?

Почему тангенс π/2 = 1.633123935319537e+16?

Код:

import math
print(math.tan(math.pi /  2))

Результат: 1.633123935319537e+16


Ответы (2 шт):

Автор решения: Zhihar

потому что 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 шага точность не меняется (достигли предела точности чисел с плавающей запятой):

введите сюда описание изображения

→ Ссылка
Автор решения: CrazyElf

Можно использовать более точные библиотеки, например:

from sympy import pi, tan

print(tan(pi / 2))

Вывод:

zoo (complex infinity)
→ Ссылка