2662 / 2237 / 240
Регистрация: 03.07.2012
Сообщений: 8,138
Записей в блоге: 1
1

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

17.08.2014, 00:28. Показов 2938. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
С точностью 12 знаков после запятой. Сколько времени считается, на каком оборудовании?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2014, 00:28
Ответы с готовыми решениями:

Чему равна минимальная сумма первых членов последовательности, превышающая некоторое заданное число R
Помогите решить! Дана последовательность 1/2, 1/3, 1/4, … . Чему равна минимальная сумма первых...

Найти сумму первых N членов гармонического ряда
Написать программу, которая вычисляет ряд такого вида: 1+ 1/2+1/3+1/4+… от одного до N. N задается...

Написать программу: сумма гармонического ряда
Дано число A (> 1). Вывести наибольшее из целых чисел K, для которых сумма 1 + 1/2 + … + 1/K будет...

Чему равна сумма цифр числа n.
Чему равна сумма цифр числа n. Параметр n задать при опросе. помогите пожалуйста...

33
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
17.08.2014, 01:10 2
В матане не очень смыслю и может так быть, местные гуру поправят. Но если считать сумму ряда с определённой точностью, то берётся какая-то эпсилон (мера сравнения) и по мере суммирования сравниваем её с приростом, дельтой. Как только дельта оказалась меньше эпсилон, посчитали. При чём тут количество членов ряда (если, конечно, тупо не сложить данное число членов)?
Либо по точности, либо по количеству.
Цитата Сообщение от zer0mail Посмотреть сообщение
Сколько времени считается
1. берёте ряд
2. кодируете
3. засекаете время
Зависит от ряда и от техники. Ну вот на парах считали похожее на ноуте пару минут с низкой точностью - порядка 10 знаков.
0
2662 / 2237 / 240
Регистрация: 03.07.2012
Сообщений: 8,138
Записей в блоге: 1
17.08.2014, 01:17  [ТС] 3
Видно, что в матане не смыслите

Не надо рассказывать "как" - просто возьми и сделай. Напиши ответ: Сумма равна XXX, времени на расчет затратил YYY, процессор ZZZ.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2014, 01:53 4
Считал "в лоб" в цикле. Если не ошибся, то 23.603066594997500, 75 секунд, процессор Intel Pentium CPU G850 2.90GHz

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

Добавлено через 17 минут
UPD посчитал "с конца" - время то же, процессор тот же, сумма другая: 23.603066594888269, отклонение от "прямой" 1.092317347684002e-10, превышает необходимую точность расчета. Я не знаю есть ли среди обеих сумм верная, но я бы "обратной" сумме верил больше
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
17.08.2014, 02:28 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 членов гармонического ряда?  
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2014, 02:35 6
пример расчета за 2 секунды - техника дошла...
Я в Матлабе считал, если что
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
17.08.2014, 02:44 7
Цитата Сообщение от _Ivana Посмотреть сообщение
Я в Матлабе считал
Ааа... ну тогда понятно. Эх, а я то, со свиным рылом, да в калашный ряд
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2014, 02:45 8
gru74ik,
C
1
long double k
имхо плохо инкрементируется - надо целый тип. И конечно же вы выкинули из цикла все лишнее - вывод промежуточных результатов, например?
ЗЫ не, ну ТС не ограничивал выбор программных средств хотя и в С должен не медленнее посчитаться, надо будет попробовать. а Вольфрам Альфа по ссылке дает за секунду 100500 десятичных знаков ....
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
17.08.2014, 03:09 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;
}
0
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
17.08.2014, 03:16 10
gru74ik, лучше целый тип, как говорили выше. Просто при делении явно приводите его в double.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2014, 03:17 11
Ну вы сами по времени должны увидеть, получше или нет. И неужели вы выводите в цикле каждый раз std::cout !?!?! Так у вас и месяца не хватит. Убирайте из цикла все лишнее, я же вам говорил! И потестируйте на миллионе сначала - но с минимальными действиями в цикле
ЗЫ и подскажите как printf long double в строку сделать - я на этом застрял, не могу проверить свой код ))))
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
17.08.2014, 03:22 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 членов гармонического ряда?  
0
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
17.08.2014, 03:24 13
gru74ik, так долго считается из-за кучи выводов в консоль.

Добавлено через 50 секунд
_Ivana,
C++
1
printf("%le", a);
Если не ошибаюсь.
1
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2014, 03:26 14
C++
1
wsprintfW(buf, L"%le", sum);
Выводит букву "e". Если после l идет f, a или другая буква - выводит ее Вот проблема-то, программа работает - результат вывести не могу ))))
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
17.08.2014, 03:33 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 членов гармонического ряда?  
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2014, 03:36 16
Мне бы ваши сложности А я все не могу победить вывод результата... В описании функции вообще не нашел вывод плавающих чисел....
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
17.08.2014, 03:39 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;
}
0
Эксперт С++
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.08.2014, 03:46 18
Лучший ответ Сообщение было отмечено IrineK как решение

Решение

В асимптотической приближенной формуле Эйлера из Википедии взял всего два члена ряда, и уже достигается требуемая точность:
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
}
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
17.08.2014, 03:47 19
Цитата Сообщение от _Ivana Посмотреть сообщение
Мне бы ваши сложности А я все не могу победить вывод результата... В описании функции вообще не нашел вывод плавающих чисел....
А тебе (давай на ты что ли?) обязательно в винде надо и обязательно на Си ?
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2014, 03:51 20
Я хотел просто взять свой код тетриса, вставить в него за пару секунд код расчета, запуская его по горячей клавише и вывести результат в поле окна, которое уже есть. Чтобы было по-быстрому Но такой засады с форматированием и выводом я не ожидал!... Хоть на чем, у меня код вывода такой:
C++
1
2
3
    wchar_t buf[50];
    wsprintfW(buf, L"%lf", sum);
    SetWindowTextW(hwndSta3, buf);
если подскажете, как на С++ красиво сделать, будет неплохо.
0
17.08.2014, 03:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2014, 03:51
Помогаю со студенческими работами здесь

Чему равна сумма значений переменных
Чему равна сумма значений переменных a, b, c после выполнения фрагмента программы bool f1, f2; ...

Сколько цифр в числе и чему равна их сумма?
дано натуральное число n(n&lt;=100) a) Сколько цифр в числе n? б) Чему равно сумма его чисел? в)...

Найти произведение членов пифагорейского триплета, сумма которых равна заданному числу
Здравствуйте! Пожалуйста, помогите. Неизвестный автор пишет программу Специальный триплет...

Определить сколько цифр в заданном натуральном числе, и чему равна сумма его цифр
Дано натуральное число n (n&lt;=100). Определить сколько цифр в числе n, чему равна сумма его цифр.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru