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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
zer0mail
2374 / 2004 / 199
Регистрация: 03.07.2012
Сообщений: 7,198
Записей в блоге: 1
#1

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

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

С точностью 12 знаков после запятой. Сколько времени считается, на каком оборудовании?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 00:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чему равна сумма 10^10 членов гармонического ряда? (C++):

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

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

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

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

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

Сколько цифр в числе и чему равна их сумма? - C++
дано натуральное число n(n<=100) a) Сколько цифр в числе n? б) Чему равно сумма его чисел? в) Найти последнюю цифру г) первую...

33
_Ivana
3186 / 1802 / 153
Регистрация: 01.03.2013
Сообщений: 5,030
Записей в блоге: 3
17.08.2014, 03:36 #16
Мне бы ваши сложности А я все не могу победить вывод результата... В описании функции вообще не нашел вывод плавающих чисел....
0
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,990
Записей в блоге: 22
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
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
17.08.2014, 03:46 #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
}
1
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,990
Записей в блоге: 22
17.08.2014, 03:47 #19
Цитата Сообщение от _Ivana Посмотреть сообщение
Мне бы ваши сложности А я все не могу победить вывод результата... В описании функции вообще не нашел вывод плавающих чисел....
А тебе (давай на ты что ли?) обязательно в винде надо и обязательно на Си ?
0
_Ivana
3186 / 1802 / 153
Регистрация: 01.03.2013
Сообщений: 5,030
Записей в блоге: 3
17.08.2014, 03:51 #20
Я хотел просто взять свой код тетриса, вставить в него за пару секунд код расчета, запуская его по горячей клавише и вывести результат в поле окна, которое уже есть. Чтобы было по-быстрому Но такой засады с форматированием и выводом я не ожидал!... Хоть на чем, у меня код вывода такой:
C++
1
2
3
    wchar_t buf[50];
    wsprintfW(buf, L"%lf", sum);
    SetWindowTextW(hwndSta3, buf);
если подскажете, как на С++ красиво сделать, будет неплохо.
0
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,990
Записей в блоге: 22
17.08.2014, 03:53 #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. А как узнать какое отклонение?
0
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,990
Записей в блоге: 22
17.08.2014, 03:56 #22
Цитата Сообщение от _Ivana Посмотреть сообщение
Я хотел просто взять свой код тетриса, вставить в него за пару секунд код расчета, запуская его по горячей клавише и вывести результат в поле окна, которое уже есть.
Цитата Сообщение от _Ivana Посмотреть сообщение
если подскажете, как на С++ красиво сделать, будет неплохо.
А, вот оно как. Не, так я пока не умею
0
_Ivana
3186 / 1802 / 153
Регистрация: 01.03.2013
Сообщений: 5,030
Записей в блоге: 3
17.08.2014, 03:56 #23
Цитата Сообщение от gru74ik Посмотреть сообщение
А как узнать какое отклонение?
Надо определить что от чего хотите отклонять От суммы бесконечного ряда - бесконечность... Я считал отклонение от суммы того же количества слагаемых, но посчитанной с конца - в обратном порядке слагаемых.
0
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,990
Записей в блоге: 22
17.08.2014, 04:23 #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;
}
0
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
_Ivana
3186 / 1802 / 153
Регистрация: 01.03.2013
Сообщений: 5,030
Записей в блоге: 3
17.08.2014, 04:29 #25
C++
1
k<STOP
Семен Семеныч!.... (С)
0
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 170
17.08.2014, 04:30 #26
Вам скорость процессора надо тестировать или точный результат получить? Вы суммируете числа от 2^0 до 2^(-34) примерно. Увеличивая погрешность на каждом шаге цикла. 34 бита из числа уже можно считать неверными просто из числа слагаемых в сумме. По факту будет больше неверных битов из-за суммирования из разных 34 порядков. Гарантировать 12 знаков, можно создав две функции, которые бы возвращали целые числа длиной в 23 знака (это для 10 системы, 64 бит не хватит, я бы взял два целых по 64 бит) для следующих двух операций 1/k и сумма таких чисел. Сумма легко делается, просто сложить две пары чисел по 64 бит и в верхнее число добавить еще 1, если снизу переполнение. Для деления можно использовать, школьный вариант столбиком. Два целых по 64 бит дадут 100% гарантию правильных 12 знаков.
0
_Ivana
3186 / 1802 / 153
Регистрация: 01.03.2013
Сообщений: 5,030
Записей в блоге: 3
17.08.2014, 04:41 #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.
0
gru74ik
17.08.2014, 04:43
  #28

Не по теме:


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

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

Добавлено через 3 минуты
Раз есть точный результат, то в чём проблема оценить отклонение. Сравните эти числа тогда и всё.
0
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,990
Записей в блоге: 22
17.08.2014, 04:54 #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;
}
0
Миниатюры
Чему равна сумма 10^10 членов гармонического ряда?  
17.08.2014, 04:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2014, 04:54
Привет! Вот еще темы с ответами:

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

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

сумма первыйх членов ряда - C++
Написать программу, которая вычисляет сумму первых п членов ряда: 1, 3, 5, 7 ... Количество суммируемых членов ряда задается во время...

сумма первых N членов ряда - C++
Помогите пожалуйста составить программу, которая вычисляет и выводит на экран сумму первых N членов ряда:1, 1/3, 1/5, 1/7, 1/9... Число N...


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

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

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