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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
vladislav23
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 24
#1

При больших значениях х ряд считает направильно - C++

19.09.2013, 11:08. Просмотров 713. Ответов 23
Метки нет (Все метки)

При больших значениях х ряд считает направильно с чем это может быть связано, вот код и сам ряд:
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
{
   double result=1;
   long int j=2;
   bool minus=true;
   double cur=x;
   double prev=0;
   double f=0;
   do
   {
      cur=pow(x,j);
      
      if (minus)
      {
         cur=cur*(-1.0);
      }
      f=1.0;
      for (long int i=1;i<=j;i++)
      {
         f=f*i;
      }
      cur=cur/f;
      result=result+cur;
      double testval=fabs(prev)-fabs(cur);
      if (j>2&&testval<=e)
      {
         break;
      }
      
      minus=!minus;
      prev=cur;
      j+=2;
   } while (1);
   return result; 
}
0
Изображения
 
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 11:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При больших значениях х ряд считает направильно (C++):

Вывести на экран дисплея сообщения о значениях функции при различных значениях аргумента - C++
помогите пожалуйста.. Разработать программу, которая выводит на экран дисплея сообщения о значениях функции при различных значениях...

Разложение в ряд. Не правильно считает - C++
Программа высчитывает значение функции и значение этой функции через ряд в данной точке. Вроде все высчитывается. Но при х&gt;6 ну или где...

Разложение в ряд Тейлора (неверно считает) - C++
Задача: Вычислить и вывести на экран в виде таблицы значения функции F(x) на интервале с шагом dx с точностью до Eps. Каждая строка...

Почему при матрице 19х19 считает, а при 20х20 вылетает? - C++
Здравствуйте, искал решение задачи коммивояжера полным перебором нашел тут: ...

Найти значение х и у при заданных значениях a и b: - C++
Найти значение х и у при заданных значениях a и b:

Вычисление значения y при разных значениях a и b - C++
Только начал изучать c++ помогите с программой

23
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
19.09.2013, 11:12 #2
C++
1
2
3
4
if (minus)
      {
         cur=cur*(-1.0);
      }
Тут не нужна проверка. Знак меняться должен на каждой итерации.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
19.09.2013, 11:41 #3
Код конечно капец.
Если вот это проверка точности
C++
1
double testval=fabs(prev)-fabs(cur);
То должен вас расстроить ошибку ряда нужно вычислять по остаточным членам, например в форме Лагранжа.
Возможно такой алгоритм подойдет больше?
C++
1
2
3
4
5
6
7
    double xSled = 1.0,//член ряда
 sum = 0.0;//сумма ряда
    do
    {
        sum += xSled;
    }
    while((xSled *= - x * x /(2 * j *(2 * j - 1))) > precision);//проверяем точность
0
vladislav23
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 24
19.09.2013, 11:56  [ТС] #4
В задании указано проверять точность по этой формуле
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
19.09.2013, 12:02 #5
Цитата Сообщение от vladislav23 Посмотреть сообщение
В задании указано проверять точность по этой формуле
По той которая написанна у вас?
0
vladislav23
0 / 0 / 0
Регистрация: 28.04.2013
Сообщений: 24
19.09.2013, 12:09  [ТС] #6
Да.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
19.09.2013, 12:15 #7
Ну тогда получаете то что имеете. Ознакомтесь с этим.
Любой ряд со стремящимися к нулю членами по вашей формуле рано или позно даст сумму с какой-то точность. А теперь рассмотрим например гармонический ряд. Его члены стремяться к нулю, однако сам ряд расходится. Так что выбросьте задачник в топку и подтяните математику.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
19.09.2013, 12:16 #8
double f=0; - меняй на unsigned long long f;
0
Catstail
Модератор
22732 / 11101 / 1797
Регистрация: 12.02.2012
Сообщений: 18,297
19.09.2013, 12:25 #9
Цитата Сообщение от Nekto Посмотреть сообщение
double f=0; - меняй на unsigned long long f;
- ни в коем случае! Только double!

Цитата Сообщение от Ilot Посмотреть сообщение
Так что выбросьте задачник в топку и подтяните математику.
- нет, задачник не виноват. И гармонический ряд здесь не при чем. Виновата машинная математика.

Ряд для косинуса сходится абсолютно при любом вещественном х. Но дело в том, что вещественное число - это зачастую бесконечная дробь, а машинная арифметика работает с длинными, но конечными дробями. Это вызывает т.н. погрешность ограничения. И эта погрешность копится (особенно для рядов типа sin/cos) и, в конце концов, способна исказить результат до полного абсурда. Мало кто из программистов (особенно начинающих) это понимает...

Рекомендую старую, но очень хорошую книгу Мак-Кракен, Дорн "Численные методы и программирование на Фортране". Там этот вопрос хорошо рассмотрен в одной из первых глав.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
19.09.2013, 12:28 #10
Цитата Сообщение от Catstail Посмотреть сообщение
- ни в коем случае! Только double!
И терять точность, начиная с определенного этапа.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
19.09.2013, 12:29 #11
Catstail, благодрю за информацию, но вы не поняли о чем идет речь.
Разность членов гармонического ряда стремиться к нулю, однако сам ряд не сходится, поэтому формула которой пользуется vladislav23 не даст правильно результата. Т.е. он пользуется неправильной формулой для оценки остатка.
0
Catstail
Модератор
22732 / 11101 / 1797
Регистрация: 12.02.2012
Сообщений: 18,297
19.09.2013, 12:30 #12
PS здесь книга
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
19.09.2013, 12:42 #13
Catstail, от души благодаю. Это именно то что мне нужно так как сам собираюсь заниматься именно численными методами. Может еще что-нибудь посоветуете(особенно интересуют ур. в часных производных)?
1
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
19.09.2013, 12:47 #14
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
#include <iostream>
#include <iomanip>
 
int main()
  {
  std::cout << "Enter x: ";
  long double x;
  std::cin >> x;
  std::cout << "Enter eps: ";
  long double eps;
  std::cin >> eps;
  long double sum = 1;
  long double numerator = 1;
  unsigned long long denominator = 1;
  unsigned long step_factorial = 2;
  long double current = 100500;
  long double sign = 1;
  long double last;
  do
    {
    sign *= -1;
    numerator *= x*x;
    denominator *= step_factorial * (step_factorial - 1);
    step_factorial += 2;
    last = current;
    current = numerator / denominator;
    sum += sign * current;
    }
  while (fabs(last - current) > eps);
  std::cout << "Result = " << std::setprecision(LDBL_DIG) << sum << std::endl;
  std::cin.ignore();
  std::cin.get();
  return 0;
  }
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
19.09.2013, 13:13 #15
Nekto, Catstail все таки прав нужно знать как оценивать ошибки, а не использовать оч. большие числа в надежде, что ошибка скроется где-то в глубине после запятой.
При больших x всего-то навсего следует пользоваться формулами приведения к стандартному отрезку [-pi, pi]. Мотайте на ус. И не нужно вам ни каких long long.
0
19.09.2013, 13:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 13:13
Привет! Вот еще темы с ответами:

Вычислить значения функций при различных значениях x - C++
Помогите! Вычислить значения функций y(x) и z(x, y) при различных значениях x. Пожалуйста!)

Вычислить выражение при разных значениях икса - C++
У меня есть программа которая считает выражение при разных значениях икса. Вот программа: #include &lt;iostream&gt; #include &lt;math.h&gt; ...

Разные результаты программы при постоянных входных значениях - C++
Доброго времени суток! Столкнулся с такой проблемой - ввожу одни и те же значения в исходный массив. Запускаю программу - выдает один...

вывод таблицы значений функции y(x) при различных значениях - C++
написать программу на С++ для вывода таблицы значений функции y(x) при различных значениях x. Значения переменной х меняються от a до b с...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru