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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
#1

Точное вычисление суммы ряда - C++

17.09.2009, 18:15. Просмотров 3516. Ответов 23
Метки нет (Все метки)

Необходимо вычислить сумму ряда 1/1+1/2+...+1/n. Известно, что в с++ подобные вычисления не точные и большую роль играет способ и порядок суммирования. Необходимо получить наиболее точный результат... Есть идеи?=)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2009, 18:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Точное вычисление суммы ряда (C++):

Вычисление суммы ряда - C++
Составить программу для вычисления суммы ряда

Вычисление суммы ряда C++ - C++
Помогите пожалуйста написать код к этим заданиям, и желательно с объяснением, а то ничего не понимаю) 1. Задания надо переписывать в...

Вычисление суммы ряда - C++
Помогите решить задачку!!! Спросить у пользователя n, вычислить 1*2+2*3+...+(n-1)*n!!!

Вычисление суммы ряда. - C++
Помогите, пожалйста!!! Вычислить сумму бесконечного ряда Y=(fabs)ak, где а=-0,1(аk-1+аk+1) при k=2,3,4... Вычисления окончить при...

Вычисление суммы ряда - C++
Вычислить \sum_{i=1}^{\propto }i^2 пока S<50 с помощью цикла while

Вычисление суммы ряда - C++
1^2+3^2+5^2+...+(2n-1)^2

23
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 20:08  [ТС] #16
Цитата Сообщение от Lolcht0 Посмотреть сообщение
да, и еще, значения, при которых теряется точность составляют n~10 в 15
не скажи.... например
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned long double sum1=0.0, sum2=0.0;
_int64 num=1000000000;
for(_int64 i=1; i<num+1; i++)
{
    sum1+=1.0/i;
}
for(_int64 i=num; i>0; i--)
{
    sum2+=1.0/i;
}
cout.precision(40);
cout << sum1 << endl << sum2 << endl;
В результате
sum1 = 21.30048150234855
sum2 = 21.300481502346148
А это уже большая разница...

Добавлено через 1 минуту
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
Математически существует следующее равенство:
(1/a)+(1/b)=(a+b)/(a*b)
Его использование в два раза сократит количество операций деления.
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
Однако, способ годится лишь для n <= 12 (при условии отведения 4 байт на хранение факториала).
Оба варианта не подходят для больших n...
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
17.09.2009, 20:09 #17
это никакая разница. физические условия дадут на порядки большую погрешность
0
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 20:19  [ТС] #18
Цитата Сообщение от Lolcht0 Посмотреть сообщение
это никакая разница. физические условия дадут на порядки большую погрешность
Значение изменилось даже при изменении порядка суммирования....
Нужен более точный алгоритм...
И ответ: "И так пойдет!", не подходит....
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
17.09.2009, 20:27 #19
да пожалуйста! то, что предлагал вам я, а это тоже самое, фактически, что предлагал Delphin_KKC. длинную арифметику и кластеры вам в руки!

только это лишено всяческого смысла)))
0
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
17.09.2009, 21:07 #20
Цитата Сообщение от Nikituki Посмотреть сообщение
Оба варианта не подходят для больших n...
для очень больших n формула Эйлера, мне кажется будет самое точное
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
17.09.2009, 21:24 #21
2Nikituki: ты скажи как задача полностью формулируется, а то ты ходишь вокруг и около, да спрашиваешь у всех сам не зная о чем.
Тебе не хватает точности double ? Бери long double !
Не хватает ?
Считай специальными классами типа BigInt - там точность можно самому задать, хотя и считать будет медленно.
0
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 22:17  [ТС] #22
Цитата Сообщение от odip Посмотреть сообщение
2Nikituki: ты скажи как задача полностью формулируется, а то ты ходишь вокруг и около, да спрашиваешь у всех сам не зная о чем.
Тебе не хватает точности double ? Бери long double !
Не хватает ?
Считай специальными классами типа BigInt - там точность можно самому задать, хотя и считать будет медленно.
эм... как бы казалось задача за 2 страницы была определена достаточно развернуто.....
Попробую так:
Необходимо вычислить сумму ряда 1/1+1/2+...+1/n. Учитывая, что в C++ вычисления являются не точными,
порядок суммирования играет важную роль. Выражение 1/n+1/(n-1)+...+1/1 дает более точный результат.
Задача – разработать алгоритм, который бы выдавал еще более точный ответ.
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
17.09.2009, 22:30 #23
Ну так казалось бы тебе ответили - используй специальную длинную арифметику и считай с какой точностью тебе нужно.
0
Nikituki
0 / 0 / 0
Регистрация: 17.09.2009
Сообщений: 15
17.09.2009, 22:32  [ТС] #24
Цитата Сообщение от odip Посмотреть сообщение
Ну так казалось бы тебе ответили - используй специальную длинную арифметику и считай с какой точностью тебе нужно.
НУ так казалось бы, что после двух последних постов я и не спрашивал больше ничего
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2009, 22:32
Привет! Вот еще темы с ответами:

Вычисление суммы ряда - C++
Всем доброго времени суток! Есть ряд: \sum_{n=0}^\infty (-1)^n * (a+b*n)/x^n Есть вот такая неработающая программа: ...

Вычисление суммы ряда - C++
ребята помогите решить. составьте пожалуйста код!) б) \sum_{n = 1}^{12} (10n - 8/ 10*n*n - 3*n + 8)

Вычисление суммы ряда - C++
Помогите, задали задание написать программу. Пользователь вводит значение 2-х переменных: х-угол и n-количество раз. суть программы...

Вычисление суммы ряда 1^k+2^k+...+n^k - C++
Даны натуральные числа n и k. Составить программу вычисления выражения 1^k+2^k+...+n^k. Помогите пожалуйста. Оператор pow использовать...


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

Или воспользуйтесь поиском по форуму:
24
Yandex
Объявления
17.09.2009, 22:32
Ответ Создать тему
Опции темы

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