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

Чему равна сумма 10^10 членов гармонического ряда? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,636
Записей в блоге: 1
17.08.2014, 00:28     Чему равна сумма 10^10 членов гармонического ряда? #1
С точностью 12 знаков после запятой. Сколько времени считается, на каком оборудовании?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 00:28     Чему равна сумма 10^10 членов гармонического ряда?
Посмотрите здесь:

C++ сумма первых N членов ряда
C++ сумма первыйх членов ряда
Чему равна сумма цифр числа n. C++
C++ Сумма членов числового ряда
Написать программу: сумма гармонического ряда C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
 Аватар для gru74ik
3108 / 1334 / 166
Регистрация: 20.02.2013
Сообщений: 3,792
Записей в блоге: 17
17.08.2014, 03:53     Чему равна сумма 10^10 членов гармонического ряда? #21
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот для 10^10 подсчёт:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main ()
{
    const long long STOP = 10000000000;
    long double sum = 0.0;
    for (long long k=1; k<=STOP; ++k)
        sum += (1.0 / k);
    std::cout << std::fixed;
    std::cout.precision(12);
    std::cout.setf(std::ios_base::showpoint);
    std::cout << "\nFinally, sum = " << sum << std::endl << std::endl;
    return 0;
}
P.S. А как узнать какое отклонение?
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
 Аватар для gru74ik
3108 / 1334 / 166
Регистрация: 20.02.2013
Сообщений: 3,792
Записей в блоге: 17
17.08.2014, 03:56     Чему равна сумма 10^10 членов гармонического ряда? #22
Цитата Сообщение от _Ivana Посмотреть сообщение
Я хотел просто взять свой код тетриса, вставить в него за пару секунд код расчета, запуская его по горячей клавише и вывести результат в поле окна, которое уже есть.
Цитата Сообщение от _Ivana Посмотреть сообщение
если подскажете, как на С++ красиво сделать, будет неплохо.
А, вот оно как. Не, так я пока не умею
_Ivana
2179 / 1384 / 124
Регистрация: 01.03.2013
Сообщений: 4,125
Записей в блоге: 2
17.08.2014, 03:56     Чему равна сумма 10^10 членов гармонического ряда? #23
Цитата Сообщение от gru74ik Посмотреть сообщение
А как узнать какое отклонение?
Надо определить что от чего хотите отклонять От суммы бесконечного ряда - бесконечность... Я считал отклонение от суммы того же количества слагаемых, но посчитанной с конца - в обратном порядке слагаемых.
gru74ik
Модератор
 Аватар для gru74ik
3108 / 1334 / 166
Регистрация: 20.02.2013
Сообщений: 3,792
Записей в блоге: 17
17.08.2014, 04:23     Чему равна сумма 10^10 членов гармонического ряда? #24
Цитата Сообщение от _Ivana Посмотреть сообщение
Я считал отклонение от суммы того же количества слагаемых, но посчитанной с конца - в обратном порядке слагаемых.
Почему-то не хочет в цикл входить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main ()
{
    const int STOP = 1;
    long double sum = 1.0 / 10000000000.0;
    for (long long k=9999999999; k<STOP; --k)
        sum += (1.0 / k);
    std::cout << std::fixed;
    std::cout.precision(12);
    std::cout.setf(std::ios_base::showpoint);
    std::cout << "\nFinally, sum = " << sum << std::endl << std::endl;
    return 0;
}
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
_Ivana
2179 / 1384 / 124
Регистрация: 01.03.2013
Сообщений: 4,125
Записей в блоге: 2
17.08.2014, 04:29     Чему равна сумма 10^10 членов гармонического ряда? #25
C++
1
k<STOP
Семен Семеныч!.... (С)
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 164
17.08.2014, 04:30     Чему равна сумма 10^10 членов гармонического ряда? #26
Вам скорость процессора надо тестировать или точный результат получить? Вы суммируете числа от 2^0 до 2^(-34) примерно. Увеличивая погрешность на каждом шаге цикла. 34 бита из числа уже можно считать неверными просто из числа слагаемых в сумме. По факту будет больше неверных битов из-за суммирования из разных 34 порядков. Гарантировать 12 знаков, можно создав две функции, которые бы возвращали целые числа длиной в 23 знака (это для 10 системы, 64 бит не хватит, я бы взял два целых по 64 бит) для следующих двух операций 1/k и сумма таких чисел. Сумма легко делается, просто сложить две пары чисел по 64 бит и в верхнее число добавить еще 1, если снизу переполнение. Для деления можно использовать, школьный вариант столбиком. Два целых по 64 бит дадут 100% гарантию правильных 12 знаков.
_Ivana
2179 / 1384 / 124
Регистрация: 01.03.2013
Сообщений: 4,125
Записей в блоге: 2
17.08.2014, 04:41     Чему равна сумма 10^10 членов гармонического ряда? #27
Точный результат Альфа посчитала, он уже не интересен Мне, например, интересно было сделать вывод плавучки в окно, сделал:
C++
1
2
3
4
5
    wchar_t buf[500];
    char bufc[500];
    _gcvt(sum, 50, bufc);
    wsprintfW(buf, L"%S", bufc);
    SetWindowTextW(hwndSta3, buf);
Буферы конечно щедро нарезал, чтобы он не ругался...

ЗЫ мой комп 5 минут считает лобовой цикл до 10^10.
gru74ik
17.08.2014, 04:43
  #28

Не по теме:


Цитата Сообщение от _Ivana Посмотреть сообщение
Семен Семеныч!.... (С)
http://www.youtube.com/watch?v=4laH4zZgYvA

Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 164
17.08.2014, 04:49     Чему равна сумма 10^10 членов гармонического ряда? #29
Чтобы быстро было, не стоит моделировать всё как в 10 системе. Исходя из результата <32 Первые 5 бит целая часть, а последующие биты эквивалентны 0.5 0.25 0.125 2^-4 и т.д. Для описанных выше двух 64 бит чисел.

Добавлено через 3 минуты
Раз есть точный результат, то в чём проблема оценить отклонение. Сравните эти числа тогда и всё.
gru74ik
Модератор
 Аватар для gru74ik
3108 / 1334 / 166
Регистрация: 20.02.2013
Сообщений: 3,792
Записей в блоге: 17
17.08.2014, 04:54     Чему равна сумма 10^10 членов гармонического ряда? #30
Цитата Сообщение от _Ivana Посмотреть сообщение
Я считал отклонение от суммы того же количества слагаемых, но посчитанной с конца - в обратном порядке слагаемых.
Хмм... У меня точно то же число получилось. Странно... Так может быть?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main ()
{
    const int STOP = 0;
    long double sum = 1.0 / 10000000000.0;
    for (long long k=9999999999; k>STOP; --k)
        sum += (1.0 / k);
    std::cout << std::fixed;
    std::cout.precision(12);
    std::cout.setf(std::ios_base::showpoint);
    std::cout << "\nFinally, sum = " << sum << std::endl << std::endl;
    return 0;
}
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
_Ivana
2179 / 1384 / 124
Регистрация: 01.03.2013
Сообщений: 4,125
Записей в блоге: 2
17.08.2014, 04:55     Чему равна сумма 10^10 членов гармонического ряда? #31
Archi0, светлые идеи конечно хорошо. Но блесните кодом!
C++
1
2
3
4
5
    unsigned long long  N = 10000000000;
    unsigned long       N1 = 4294967290;
    long double sum = 0.0;
    for(unsigned long i = 1; i<=N1; i++) sum +=(1.0/i);
    for(unsigned long long i = N1+1; i<=N; i++) sum +=(1.0/i);
так чуть менее 4 минут.
gru74ik
Модератор
 Аватар для gru74ik
3108 / 1334 / 166
Регистрация: 20.02.2013
Сообщений: 3,792
Записей в блоге: 17
17.08.2014, 05:02     Чему равна сумма 10^10 членов гармонического ряда? #32
_Ivana, это ты все вычисления на две части разбил? А зачем? Типа точность выше?
_Ivana
2179 / 1384 / 124
Регистрация: 01.03.2013
Сообщений: 4,125
Записей в блоге: 2
17.08.2014, 05:08     Чему равна сумма 10^10 членов гармонического ряда? #33
Нет, типа скорость выше, что и подтверждается замерами - 4 минуты против 5 (хотя все равно это копейки, особенно на фоне Вольфрама или формулы Эйлера). То 4 байта целого типа инкрементировать и во флоаты переводить, а то 8. Я просто хотел проверить насколько убыстрится выполнение кода от такой "оптимизации".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2014, 10:31     Чему равна сумма 10^10 членов гармонического ряда?
Еще ссылки по теме:

C++ Найти сумму первых N членов гармонического ряда
Чему равна минимальная сумма первых членов последовательности, превышающая некоторое заданное число R C++
Сумма первых N членов знакочередующегося ряда C++

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

Или воспользуйтесь поиском по форуму:
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,636
Записей в блоге: 1
17.08.2014, 10:31  [ТС]     Чему равна сумма 10^10 членов гармонического ряда? #34
Ответ 23.6030665948920 точный (привел 13 знаков).
Теперь поговорим о граблях:
Расчет "от конца" точнее, чем расчет "от начала".
Я делал одновременно прямой и обратный расчет, времени ушло 80сек. (Haswell 4590).
Еще я попробовал рассчитать на С#. Время то же самое, что на C++. Однако на C# легко распараллелить (хотя и тут есть грабли) и тогда 30сек. В С# есть тип decimal для очень точных расчетов, но он считает 23 мин (4 потока)

Если использовать long double, тогда ответ точный с любой стороны, но это при условии, что long double точнее, чем double (в VS 2010 они одинаковы, поэтому точного расчета не получится )
Yandex
Объявления
17.08.2014, 10:31     Чему равна сумма 10^10 членов гармонического ряда?
Ответ Создать тему
Опции темы

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