Форум программистов, компьютерный форум CyberForum.ru

Вычисление косинуса через ряд - C++

Восстановить пароль Регистрация
 
АлександрКом
11 / 11 / 1
Регистрация: 21.10.2012
Сообщений: 326
17.12.2013, 20:11     Вычисление косинуса через ряд #1
Здравствуйте =) Пытаюсь посчитать косинус через ряд Тейлора, написал программку, но не могу понять, как она считает (результаты не сходятся с табличными).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <tgmath.h>
using namespace std;
 
int Fact(int x)
{
    if (x==0)
    return 1;
    return x*Fact(x-1);
}
 
int main()
{
    double eps = 0.0001;
    int k = 1;
    double last_slag = 1;
    double sum = 1;
 
    while (last_slag>eps) {
    last_slag = pow(-1,k)*pow(1.5708,2*k) / Fact(2*k);
    sum += last_slag;
    k++;
    };
 
    cout << sum << endl;
    return 0;
}
тут считаю cos(90град), но ответ далёк от нуля. Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RHB
33 / 33 / 8
Регистрация: 27.01.2013
Сообщений: 200
12.06.2014, 15:37     Вычисление косинуса через ряд #2
Если кому-нибудь когда нибудь будет актуально, то вот работающее решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
const float E=0.001;
 
unsigned long long fact(int N)
{
    if(N<2)
        return 1;
    return N * fact(N - 1);
}
 
float f(float x, int n)
{
    double m=pow(-1.f,n)*(pow(x,2*n)/fact(2*n));
    if(fabs(m)>=E)
    {
        m+=f(x,n+1);
    }
    return m;
}
 
int main()
{
    float x;
    cin >> x;
    if(x<0)
    {
        cout<<" ne prenadlejit"<<endl;
        system("pause");
        return 0;
    }
    cout<<(f(x,0))<<endl;
    cout<<cos(x)<<endl;
    system("pause");
    return 0;
}
Ваша ошибка в том, что у вас должно быть
1) int k = 1;
2) double sum = 0.f;
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.06.2014, 15:49     Вычисление косинуса через ряд #3
RHB, а зачем мешать float и double?
И почему отрицательный аргумент отбрасывается? Косинус ведь периодическая функция, определенная на всём множестве вещественных чисел.
RHB
33 / 33 / 8
Регистрация: 27.01.2013
Сообщений: 200
15.06.2014, 15:12     Вычисление косинуса через ряд #4
Цитата Сообщение от Tulosba Посмотреть сообщение
RHB, а зачем мешать float и double?
Тут ниче не могу сказать в свое оправдание... ну кому надо поди догадаются поправить
Цитата Сообщение от Tulosba Посмотреть сообщение
И почему отрицательный аргумент отбрасывается? Косинус ведь периодическая функция, определенная на всём множестве вещественных чисел.
Я это вытащил из своих старых программ за первый курс, там видимо такое задание было.

Не по теме:

ЗЫ на эту тему вообще наткнулся случайно на форуме, стало интересно вот поэтому и ответил. Так то она полугодовой давности и вряд ли уже этот ответ нужен человеку. НО мб кому-нить другому поможет)

zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,180
Завершенные тесты: 1
15.06.2014, 15:22     Вычисление косинуса через ряд #5
Посмотрите вот здесь.
Вычисление функций разложением в ряд Тейлора:
Большая коллекция решенных задач
Yandex
Объявления
15.06.2014, 15:22     Вычисление косинуса через ряд
Ответ Создать тему
Опции темы

Текущее время: 16:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru