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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
zer0mail
2176 / 1859 / 187
Регистрация: 03.07.2012
Сообщений: 6,615
Записей в блоге: 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrej
И целого heap'а мало
 Аватар для Andrej
93 / 54 / 9
Регистрация: 31.07.2014
Сообщений: 293
17.08.2014, 01:10     Чему равна сумма 10^10 членов гармонического ряда? #2
В матане не очень смыслю и может так быть, местные гуру поправят. Но если считать сумму ряда с определённой точностью, то берётся какая-то эпсилон (мера сравнения) и по мере суммирования сравниваем её с приростом, дельтой. Как только дельта оказалась меньше эпсилон, посчитали. При чём тут количество членов ряда (если, конечно, тупо не сложить данное число членов)?
Либо по точности, либо по количеству.
Цитата Сообщение от zer0mail Посмотреть сообщение
Сколько времени считается
1. берёте ряд
2. кодируете
3. засекаете время
Зависит от ряда и от техники. Ну вот на парах считали похожее на ноуте пару минут с низкой точностью - порядка 10 знаков.
zer0mail
2176 / 1859 / 187
Регистрация: 03.07.2012
Сообщений: 6,615
Записей в блоге: 1
17.08.2014, 01:17  [ТС]     Чему равна сумма 10^10 членов гармонического ряда? #3
Видно, что в матане не смыслите

Не надо рассказывать "как" - просто возьми и сделай. Напиши ответ: Сумма равна XXX, времени на расчет затратил YYY, процессор ZZZ.
_Ivana
2174 / 1379 / 123
Регистрация: 01.03.2013
Сообщений: 4,116
Записей в блоге: 2
17.08.2014, 01:53     Чему равна сумма 10^10 членов гармонического ряда? #4
Считал "в лоб" в цикле. Если не ошибся, то 23.603066594997500, 75 секунд, процессор Intel Pentium CPU G850 2.90GHz

Добавлено через 6 минут
zer0mail, а зачем вам это?

Добавлено через 17 минут
UPD посчитал "с конца" - время то же, процессор тот же, сумма другая: 23.603066594888269, отклонение от "прямой" 1.092317347684002e-10, превышает необходимую точность расчета. Я не знаю есть ли среди обеих сумм верная, но я бы "обратной" сумме верил больше
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
17.08.2014, 02:28     Чему равна сумма 10^10 членов гармонического ряда? #5
Цитата Сообщение от _Ivana Посмотреть сообщение
Считал "в лоб" в цикле. Если не ошибся, то 23.603066594997500, 75 секунд, процессор Intel Pentium CPU G850 2.90GHz
Да ладно! 10^10 членов - это же 10 000 000 000 (10 миллиардов). У меня миллион вычисляется 2 минуты. А когда ставлю 10 миллионов циклов - вообще ни конца ни края не видно вычислениям.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main ()
{
    using namespace std;
 
    const long double STOP_LOOP = 1000000.0;
    long double sum = 0.0;
    for (long double k = 1.0; k<STOP_LOOP; ++k)
    {
        sum +=(1.0 / k);
        cout << fixed;
        cout.precision(12);
        cout.setf(ios_base::showpoint);
        cout << sum << endl << endl;
    }
 
    cout << "Finally, sum = " << sum << endl << endl;
 
    return 0;
}
P.S. Конфиг моего компа:
DualCore AMD Athlon 64 X2, 2300 MHz (11.5 x 200) 4400+, Gigabyte GA-MA770-UD3 v2.0, 2048 Мб (DDR2-667 DDR2 SDRAM), NVIDIA GeForce 8600 GTS (256 Мб), ST3750528AS (750 Гб, 7200 RPM, SATA-II).
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
_Ivana
2174 / 1379 / 123
Регистрация: 01.03.2013
Сообщений: 4,116
Записей в блоге: 2
17.08.2014, 02:35     Чему равна сумма 10^10 членов гармонического ряда? #6
пример расчета за 2 секунды - техника дошла...
Я в Матлабе считал, если что
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
17.08.2014, 02:44     Чему равна сумма 10^10 членов гармонического ряда? #7
Цитата Сообщение от _Ivana Посмотреть сообщение
Я в Матлабе считал
Ааа... ну тогда понятно. Эх, а я то, со свиным рылом, да в калашный ряд
_Ivana
2174 / 1379 / 123
Регистрация: 01.03.2013
Сообщений: 4,116
Записей в блоге: 2
17.08.2014, 02:45     Чему равна сумма 10^10 членов гармонического ряда? #8
gru74ik,
C
1
long double k
имхо плохо инкрементируется - надо целый тип. И конечно же вы выкинули из цикла все лишнее - вывод промежуточных результатов, например?
ЗЫ не, ну ТС не ограничивал выбор программных средств хотя и в С должен не медленнее посчитаться, надо будет попробовать. а Вольфрам Альфа по ссылке дает за секунду 100500 десятичных знаков ....
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
17.08.2014, 03:09     Чему равна сумма 10^10 членов гармонического ряда? #9
Цитата Сообщение от _Ivana Посмотреть сообщение
имхо плохо инкрементируется - надо целый тип
Так получше?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main ()
{
    const long long STOP_LOOP = 1000000;
    long double sum = 0.0;
    long double k = 1.0;
    for (long long i=1; i<STOP_LOOP; ++i)
    {
        sum += (1.0 / k);
        std::cout << std::fixed;
        std::cout.precision(12);
        std::cout.setf(std::ios_base::showpoint);
        std::cout << i << ".\t\t\t" << sum << std::endl << std::endl;
        k += 1.0;
    }
 
    std::cout << "\nFinally, sum = " << sum << std::endl << std::endl;
 
    return 0;
}
MastAKK
 Аватар для MastAKK
143 / 134 / 12
Регистрация: 13.10.2012
Сообщений: 585
Записей в блоге: 1
17.08.2014, 03:16     Чему равна сумма 10^10 членов гармонического ряда? #10
gru74ik, лучше целый тип, как говорили выше. Просто при делении явно приводите его в double.
_Ivana
2174 / 1379 / 123
Регистрация: 01.03.2013
Сообщений: 4,116
Записей в блоге: 2
17.08.2014, 03:17     Чему равна сумма 10^10 членов гармонического ряда? #11
Ну вы сами по времени должны увидеть, получше или нет. И неужели вы выводите в цикле каждый раз std::cout !?!?! Так у вас и месяца не хватит. Убирайте из цикла все лишнее, я же вам говорил! И потестируйте на миллионе сначала - но с минимальными действиями в цикле
ЗЫ и подскажите как printf long double в строку сделать - я на этом застрял, не могу проверить свой код ))))
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
17.08.2014, 03:22     Чему равна сумма 10^10 членов гармонического ряда? #12
На компе сына миллион итераций 5 минут считалось.
Конфиг компа:
Кликните здесь для просмотра всего текста

Центральный процессор QuadCore Intel Core i5-4440, 3100 MHz

Материнская плата MSI B85M-E33 LGA 1150, mATX, Retail

Чипсет системной платы Intel Lynx Point B85, Intel Haswell

Системная память 8120 МБ (DDR3-1333 DDR3 SDRAM)
DIMM1: Corsair Vengeance CMZ8GX3M2A1600C9 4 ГБ DDR3-1333 DDR3 SDRAM
DIMM3: Corsair Vengeance CMZ8GX3M2A1600C9 4 ГБ DDR3-1333 DDR3 SDRAM

Видеокарта 2Gb PCI-E GeForce GTX 760, ASUS [GTX760-DCMOC-2GD5] (GDDR5, 192bit, 2xDVI, HDMI, DisplayPort, PCI-E_3.0) RTL

Монитор Acer AL1916W [19" LCD] (L520912663E1)

Звуковой адаптер nVIDIA HDMI/DP @ nVIDIA GK104 - High Definition Audio Controller

Звуковой адаптер Realtek ALC887 @ Intel Lynx Point PCH - High Definition Audio Controller [C-2]

Дисковый накопитель SSD Smartbuy Ignition 2 SB120GB-IGNT-25SAT3, 120Гб, SATA III

Дисковый накопитель HDD WDC WD10EZEX-00ZF5A0 ATA Device (1000 ГБ, 7200 RPM, SATA-III)

Сетевой адаптер Realtek PCIe GBE Family Controller

Блок питания ATX Zalman 500W (ZM-500GS) APFC, ATX 2.31, 120mm FAN + 4x HDD + 6x SATA, + 2x PCIE 6pin , black, RTL

Охлаждение ЦП Cooler DeepCool GAMMAXX 200

Корпус MiniTower ZALMAN ZM-T2 PLUS, mATX, Чёрный (без блока питания) 270mm VGA. USB3.0, FAN120 LED

Вентилятор Arctic Cooling F12 PWM для ATX корпуса 120x120 (600 - 1350 rpm, 57 CFM, 24.4 dBA, 4 pin, Гидродинамический)

Вентилятор Arctic Cooling F9 PWM для ATX корпуса 92x92 (550 - 1800 rpm, 35 CFM, 23,5dBA, 4pin, Гидродинамический)
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
MastAKK
 Аватар для MastAKK
143 / 134 / 12
Регистрация: 13.10.2012
Сообщений: 585
Записей в блоге: 1
17.08.2014, 03:24     Чему равна сумма 10^10 членов гармонического ряда? #13
gru74ik, так долго считается из-за кучи выводов в консоль.

Добавлено через 50 секунд
_Ivana,
C++
1
printf("%le", a);
Если не ошибаюсь.
_Ivana
2174 / 1379 / 123
Регистрация: 01.03.2013
Сообщений: 4,116
Записей в блоге: 2
17.08.2014, 03:26     Чему равна сумма 10^10 членов гармонического ряда? #14
C++
1
wsprintfW(buf, L"%le", sum);
Выводит букву "e". Если после l идет f, a или другая буква - выводит ее Вот проблема-то, программа работает - результат вывести не могу ))))
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
17.08.2014, 03:33     Чему равна сумма 10^10 членов гармонического ряда? #15
Цитата Сообщение от _Ivana Посмотреть сообщение
неужели вы выводите в цикле каждый раз std::cout !?!?! Так у вас и месяца не хватит.
Цитата Сообщение от MastAKK Посмотреть сообщение
gru74ik, так долго считается из-за кучи выводов в консоль.
Всё, дошло. Вот так быстро считает (правда, только 10^9):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main ()
{
    const long long STOP_LOOP = 1000000000;
    long double sum = 0.0;
 
    for (long long k=0; k<STOP_LOOP; ++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
2174 / 1379 / 123
Регистрация: 01.03.2013
Сообщений: 4,116
Записей в блоге: 2
17.08.2014, 03:36     Чему равна сумма 10^10 членов гармонического ряда? #16
Мне бы ваши сложности А я все не могу победить вывод результата... В описании функции вообще не нашел вывод плавающих чисел....
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
17.08.2014, 03:39     Чему равна сумма 10^10 членов гармонического ряда? #17
Тьфу, ёпрст. Опять с кодом напутал. Вот как надо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main ()
{
    const long long STOP_LOOP = 10000000000;
    long double sum = 0.0;
 
    for (long long k=1; k<=STOP_LOOP; ++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;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
17.08.2014, 03:46     Чему равна сумма 10^10 членов гармонического ряда? #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В асимптотической приближенной формуле Эйлера из Википедии взял всего два члена ряда, и уже достигается требуемая точность:
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
41
42
43
44
45
46
47
48
49
50
/////////////////////////////////////////////////////////////////////////////////////////
// Чему равна сумма 10^10 членов гармоническнго ряда с точностью 12 знаков после запятой.
/////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iomanip>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
void    set_n_th_partial_sum_of_harmonic_series
    (
        double      n,
        double  &   partial_sum
    )
{
    static  const   double  GAMMA   =   0.57721566490153286;
 
    partial_sum                     =       log(n) 
                                        +   GAMMA 
                                        +   1.0 / 2 / n 
                                        -   1.0 / 12 / n / n;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
 
    for(;;)
    {
        double  n   =   0;
        std::cout   <<  "n = ";
        std::cin    >>  n;
 
        double  partial_sum   =   0;
        double  partial_sum_pract   =   0;
        double  precision_theor     =   0;
        double  precision_pract     =   0;
 
        set_n_th_partial_sum_of_harmonic_series
            (
                n,
                partial_sum
            );
 
        std::cout   <<  "Частичная сумма: "
                    <<  std::fixed
                    <<  std::setprecision(20)
                    <<  partial_sum
                    <<  std::endl
                    <<  std::endl;
    }//for
}
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
17.08.2014, 03:47     Чему равна сумма 10^10 членов гармонического ряда? #19
Цитата Сообщение от _Ivana Посмотреть сообщение
Мне бы ваши сложности А я все не могу победить вывод результата... В описании функции вообще не нашел вывод плавающих чисел....
А тебе (давай на ты что ли?) обязательно в винде надо и обязательно на Си ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2014, 03:51     Чему равна сумма 10^10 членов гармонического ряда?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
_Ivana
2174 / 1379 / 123
Регистрация: 01.03.2013
Сообщений: 4,116
Записей в блоге: 2
17.08.2014, 03:51     Чему равна сумма 10^10 членов гармонического ряда? #20
Я хотел просто взять свой код тетриса, вставить в него за пару секунд код расчета, запуская его по горячей клавише и вывести результат в поле окна, которое уже есть. Чтобы было по-быстрому Но такой засады с форматированием и выводом я не ожидал!... Хоть на чем, у меня код вывода такой:
C++
1
2
3
    wchar_t buf[50];
    wsprintfW(buf, L"%lf", sum);
    SetWindowTextW(hwndSta3, buf);
если подскажете, как на С++ красиво сделать, будет неплохо.
Yandex
Объявления
17.08.2014, 03:51     Чему равна сумма 10^10 членов гармонического ряда?
Ответ Создать тему
Опции темы

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