Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
BoBaH26
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
1

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

08.04.2012, 20:31. Просмотров 441. Ответов 9
Метки нет (Все метки)

Здравствуйте! У меня такой вопрос. Есть задача:
Определить количество членов в произведении в зависимости от погрешности

Необходимо найти кол-во членов произведения, чтобы равенство выполнялось с погрешностью до 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.
Приходится долго ждать. Неужели надо брать именно столько членов или все-таки где-то есть ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 20:31
Ответы с готовыми решениями:

Определить количество членов Ak последовательности a1,a2,..an
Даны натуральные числа Ai={a1,a2,...an} Определить количество членов Ak...

Рекурсия: количество возможных расстановок скобок в произведении n чисел
Написать на языке С рекурсивную функцию вычисляющую количество полных...

Определить количество и сумму членов последовательности
Даны натуральное n и целые числа a(1), a(2),...,a(n). Определить количество и...

Определить количество членов последовательности, являющихся нечётными.
Дано целое число n, и действительные числа а1…аn. Определить количество членов...

Определить количество членов последовательности целых чисел
Программа получает на вход последовательность целых неотрицательных чисел,...

9
BoBaH26
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 21:30  [ТС] 2
В чем проблема не подскажете?

Добавлено через 38 минут
Извините за настойчивость, но надо срочно!
0
zss
Модератор
Эксперт С++
7409 / 6799 / 4301
Регистрация: 18.12.2011
Сообщений: 17,958
Завершенные тесты: 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;
}
1
BoBaH26
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 22:22  [ТС] 4
zss, не могли бы Вы объяснить, как она работает в вашем случае? А то не пойму никак некоторые моменты. Например, что значит "1./sqrt(2.0)", у меня ведь (корень из 2)/2. И условие в цикле несовсем понятно. А само число (результат) меньше моего на ~30 000

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

Определить количество членов последовательности удовлетворяющих заданному условию
Даны натуральные числа n, a1,...,an. Определить количество членов ak...

Определить количество членов последовательности являющихся чётными числами
даны натуральные числа n a1...an определить количество членов...

Определить количество членов последовательности удовлетворяющих заданному условию
Даны натуральные числа n ,А 1,А 2, ..., Аn. Определить коли*- чество членов Аn...


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

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

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