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

Вычисление косинуса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.61
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
17.10.2010, 21:29     Вычисление косинуса #1
:
Всем добрового время суток, я пока только начинаю изучать C++ и у меня поэтому много вопросов. Дана программа которая используя разложения косинуса, вычисляет его различные значения x:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
const int N = 100;
int main() {
    double x, q, s = 0;
        int n;
    cout << "Enter x = ";
    cin >> x;
    q = x;
    for (n = 1; n <= N; n++) {
        s += q;
        q *= (-1) * x * x /(2 * n - 1) / (2 * n);}
    cout << "cos("<<x<<") = "<< s << endl;
    return 0;
}
программа выдает не правильные значения углов 30, 45, 60, 90 и 180. Скажите пожалуйста правильна ли она вообще? Заранее огромное спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
17.10.2010, 21:36     Вычисление косинуса #2
угол в радианах ?
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
17.10.2010, 21:38  [ТС]     Вычисление косинуса #3
Алгоритм и формула вычисления косинуса правильны или нет?
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
17.10.2010, 21:38     Вычисление косинуса #4
C++
1
q = x;
у косинуса первый член 1 вродь. Заменить надо на
C++
1
q = 1;
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
17.10.2010, 21:39     Вычисление косинуса #5
C++
1
2
3
4
5
#define _USE_MATH_DEFINES
#include <cmath>
 
radians = x *  M_PI / 180;
cout << "cos " << x << " = " << cos(radians);
и не надо мучаться
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
17.10.2010, 21:47  [ТС]     Вычисление косинуса #6
Программа используя разложения косинуса в ряд Тейлора должна вычислять, значения x косинуса в любой точке. Скажите пожалуйста правильно ли написана программа?
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
17.10.2010, 21:48     Вычисление косинуса #7
isaak, ну вычислите для x=300*pi
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
17.10.2010, 21:52  [ТС]     Вычисление косинуса #8
Получается отрицательное значение с плавающей точкой, а какой правильный алгоритм?
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
17.10.2010, 21:56     Вычисление косинуса #9
Да тут подвох в больших числах, которые не умещаются в стандартных типах. x=x%(2*pi) - можно сразу после ввода написать, правда будет падать точность из-за того, что число пи все не знаем.
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
17.10.2010, 22:12  [ТС]     Вычисление косинуса #10
А алгоритм и формула вычисления правильны???????
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
17.10.2010, 22:55     Вычисление косинуса #11
Цитата Сообщение от isaak Посмотреть сообщение
А алгоритм и формула вычисления правильны???????
да, все верно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2010, 23:39     Вычисление косинуса
Еще ссылки по теме:

Задания интервала phi у косинуса C++
Нормальное значение косинуса C++
Вычисление косинуса разложением в ряд (C++ и Asm) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.10.2010, 23:39     Вычисление косинуса #12
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
#include <cstdio>
#include <cmath>
#include <iostream> 
 
using namespace std;
 
#define PRECISION 1e-6
 
//exp(x) = 1 - x^2/2! + x^4/4! 
 
double _cos( const double x ){
  double dVal, dTemp;
  unsigned nStep = 1;
  for( dVal = 1.0, dTemp = 1.0; fabs(dTemp) >= PRECISION ; ++nStep ){
    dTemp *= -x*x/((2.0*nStep)*(2*nStep-1));
    dVal += dTemp;
  }
  return dVal;
}
 
int main(){
  printf( "%f %f\n", _cos( 5.0 ), cos(5.0) );
  return 0;
}
знали бы вы сколько я репу чесал, пока не додумался fabs поставить
пора бы уже хрестоматию всех разложений составлять
Yandex
Объявления
17.10.2010, 23:39     Вычисление косинуса
Ответ Создать тему
Опции темы

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