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

Определить количество членов в произведении в зависимости от погрешности - C++

Восстановить пароль Регистрация
 
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 20:31     Определить количество членов в произведении в зависимости от погрешности #1
Здравствуйте! У меня такой вопрос. Есть задача:
Определить количество членов в произведении в зависимости от погрешности
Необходимо найти кол-во членов произведения, чтобы равенство выполнялось с погрешностью до 6 знаков.
Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
 
 
int main()
{
    double const_t=int(sqrt(double(2))/2*1000000);
    float P=1;
    int k=1;
    cout<<"const_t = "<<const_t;
    while (int(P*1000000)!=const_t)
    {
        P=P*(1+pow(float(-1),k)/(2*k+1));
        cout<<"\n"<<P;
        k++;
    }
    cout<<"\n"<<int(P*1000000);
    cout<<"\nKol-vo: "<<k;
    _getch();
    return 0;
}
Он работает, но в результате выдает, что кол-во членов будет равно 188 307.
Приходится долго ждать. Неужели надо брать именно столько членов или все-таки где-то есть ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 20:31     Определить количество членов в произведении в зависимости от погрешности
Посмотрите здесь:

C++ Определить количество членов последовательности а1, ..., an, имеющих нечетные порядковые номера
C++ Определить количество членов последовательности, являющихся квадратами четных чисел
C++ Определить количество нечетных членов последовательности, имеющих четные номера
C++ Определить, максимальное количество подряд идущих отрицательных членов последовательности.
определить количество и сумму членов последовательности C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 21:30  [ТС]     Определить количество членов в произведении в зависимости от погрешности #2
В чем проблема не подскажете?

Добавлено через 38 минут
Извините за настойчивость, но надо срочно!
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
08.04.2012, 21:45     Определить количество членов в произведении в зависимости от погрешности #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
  int main()
{
    double P=1,Pold=0,Ak=-1.;
    int k=1;
     while (fabs(P-Pold)>1e-6)
    {
        Pold=P;
        P*=(1+Ak/(2.0*k+1.0));
        Ak=-Ak;
        k++;
    }
    cout<<"Proizv="<<P<<endl;
    cout<<"must be="<<1./sqrt(2.0)<<endl;
    cout<<"\nKol-vo: "<<k;
    _getch();
    return 0;
}
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 22:22  [ТС]     Определить количество членов в произведении в зависимости от погрешности #4
zss, не могли бы Вы объяснить, как она работает в вашем случае? А то не пойму никак некоторые моменты. Например, что значит "1./sqrt(2.0)", у меня ведь (корень из 2)/2. И условие в цикле несовсем понятно. А само число (результат) меньше моего на ~30 000

Добавлено через 10 минут
Я так понял, что мы выполняем действия в цикле до тех пор, пока разница между соседними множителями не будет меньше 0,000001?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 22:26     Определить количество членов в произведении в зависимости от погрешности #5
Цитата Сообщение от BoBaH26 Посмотреть сообщение
zss, не могли бы Вы объяснить, как она работает в вашем случае? А то не пойму никак некоторые моменты. Например, что значит "1./sqrt(2.0)", у меня ведь (корень из 2)/2. И условие в цикле несовсем понятно. А само число (результат) меньше моего на ~30 000

Добавлено через 10 минут
Я так понял, что мы выполняем действия в цикле до тех пор, пока разница между соседними множителями не будет меньше 0,000001?
1) (корень из 2)/2 равносильно 1/(корень из двух).
2) Между предыдущим значением и текущим.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 22:46  [ТС]     Определить количество членов в произведении в зависимости от погрешности #6
Цитата Сообщение от Nekto Посмотреть сообщение
1) (корень из 2)/2 равносильно 1/(корень из двух).
2) Между предыдущим значением и текущим.
Я не совсем понял, почему мы проверяем разницу между соседними множителями? Нам ведь надо сравнивать с 1/(корень из двух)...
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 22:49     Определить количество членов в произведении в зависимости от погрешности #7
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Я не совсем понял, почему мы проверяем разницу между соседними множителями? Нам ведь надо сравнивать с 1/(корень из двух)...
Потому что каждый последующий член становится всё ближе к 1 и разница между соседними значениями становится всё меньше. А если б тебе не сказали, что там должно быть 1/(корень из двух)?
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 23:00  [ТС]     Определить количество членов в произведении в зависимости от погрешности #8
Цитата Сообщение от Nekto Посмотреть сообщение
Потому что каждый последующий член становится всё ближе к 1 и разница между соседними значениями становится всё меньше. А если б тебе не сказали, что там должно быть 1/(корень из двух)?
Т.е. фактически, мы не сравниваем его с значением в правой части, а накапливаем счетчик до тех пор, пока число не станет изменяться всего на 0,000001 и меньше?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 23:03     Определить количество членов в произведении в зависимости от погрешности #9
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Т.е. фактически, мы не сравниваем его с значением в правой части, а накапливаем счетчик до тех пор, пока число не станет изменяться всего на 0,000001 и меньше?
Да. Потому что с каждым членом разница будет еще меньше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2012, 23:15     Определить количество членов в произведении в зависимости от погрешности
Еще ссылки по теме:

Определить количество членов последовательности, имеющих четные порядковые номера и являющихся нечетными числами C++
Определить количество членов последовательности, имеющих четные порядковые номера и являющихся нечетными C++

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

Или воспользуйтесь поиском по форуму:
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 23:15  [ТС]     Определить количество членов в произведении в зависимости от погрешности #10
Тогда вот такой пример:
Определить количество членов в произведении в зависимости от погрешности
Здесь, если поступать аналогично, только используя формулу: P*=(1-1/pow(float(k),2)), можно увидеть, что примерно на 240 члене изменение происходит меньше, чем на 0,00001, следовательно, цикл прерывается. В итоге Р=0,50222.... НО! Изменение происходит, медленно, но происходит. Если сделать простой цикл с параметром, то видно, что при значении счетчика в 30 000 и более изменение незначительное, но число приближается к 0,50000. Вот именно это и надо подсчитать, т.е. значение счетчика, когда число станет ~0.5. А иначе неточное значение получается...
Yandex
Объявления
08.04.2012, 23:15     Определить количество членов в произведении в зависимости от погрешности
Ответ Создать тему
Опции темы

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