Ряд Тейлора предназначен для математической функции косинуса, аргументы которой приведены в радианах. Так что 90, вероятно, не означает, что вы думали, что это значит здесь.
Кроме того, для ряда требуется больше терминов, чем длиннее аргумент от 0. Как правило, количество терминов должно быть сопоставимо с размером аргумента, прежде чем вы даже начнете видеть, что последовательные термины становятся меньше, а их намного больше, чем что для того, чтобы получить сближение. 20 - очень мало терминов для использования при x = 90.
Другая проблема заключается в том, что вы вычисляете факториал как int
. Факторная функция растет очень быстро - уже за 13! обычный C int
(на 32-битной машине) будет переполнен, так что ваши условия за шестым будут в любом случае совершенно неверными.
Фактически факториалы и степени 90 быстро становятся слишком большими, чтобы быть представленными даже как double
с. Если вам нужен какой-либо шанс увидеть сходство рядов, вы не должны вычислять каждый термин с нуля, а извлекаете его из предыдущего, используя формулу, такую как
nextTerm = - prevTerm * x * x / (2*i-1) / (2*i);