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

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

Войти
Регистрация
Восстановить пароль
 
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
#1

Почему выводит неверный результат при вычислении произведения? - C++

30.07.2014, 15:34. Просмотров 431. Ответов 6
Метки нет (Все метки)

Еще 1 вопрос из разряда нубских:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    setlocale(0, "");
    int n,N;
    double s=1;
    cout<<"Ââåäèòå ГЈГ°Г*Г*èöó ïðîèçâåäåГ*ГЁГї N= ";
    cin>>N;
    for ( n=0; n<=N; n++)
    {
        s*=(1+(double)pow(1/2,2*n));
    }
    cout<<"s = "<<s<<endl;
    return 0;
}
Почему если N=1 ответ получается 2 когда 2 (при n=0)*1.25 (при n=1)=2.5
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2014, 15:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему выводит неверный результат при вычислении произведения? (C++):

При вычислении выражения выдается неверный результат - C++
Добрый вечер! Пытался разобраться, но, увы, не получилось. У меня есть пару вопросов: 1) Что значит следующая постановка: &quot;Код методов –...

Почему выводит неверный результат? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;locale.h&gt; #include &lt;stdlib.h&gt; using namespace std; int...

При значении больше 10 выводит неверный результат - C++
При вводе чисел до 10, например 4 выводится результат 4 = 4.02725. Начина с 10 результат такой 10=10. Почему так ? #include &lt;iostream&gt; ...

Калькулятор выводит неверный результат - C++
Изучаю С++ по Страуструпу. Дошел до следующей задачи(калькулятор) и &quot;буксую&quot;, не пойму в чем дело, код с книгой сверял несколько раз. ...

Выводит неверный результат ln2=1-1/2+1/3-1/4 - C++
Здравствуйте, необходимо написать последовательный и параллельный код для подсчета ln2=1-1/2+1/3-1/4... Вот что получилось: #include...

Нахождение наибольшего общего делителя - почему выводит неверный итог? - C++
Всем привет, что-то не могу понять:( Очень прошу помочь! int a, b; cin &gt;&gt; a &gt;&gt; b; while (b != 0) { a %= b; swap(a, b); } ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Firework
63 / 87 / 23
Регистрация: 01.04.2013
Сообщений: 593
30.07.2014, 15:47 #2
1/2 даёт 0. Т.к. деление целочисленное. Замените на 1.0/2.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
30.07.2014, 16:00 #3
Смысла нет вызывать функцию pow для возведения в целую степень.
Воспользуемся рекуррентным соотношением a(n)=a(n-1)*0.5*0.5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    setlocale(LC_ALL, "Rus");
    cout<<"Введите границу произведения N= ";
    int N; cin>>N;
    double an=1;
    double s=1;
    for (int n=1; n<=N; n++)
    {
           an*=0.5*0.5;
           s*=1.+an;
    }
    cout<<"s = "<<s<<endl;
    system("pause");
    return 0;
}
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
30.07.2014, 16:09 #4
pow(1/2,2*n) = 0 возвести в 2*n степень. Второй пост прочитайте, вам человек объяснил.
0
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
30.07.2014, 21:03  [ТС] #5
А как же указанный мною double в выражении?
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
30.07.2014, 21:37 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Fobos315 Посмотреть сообщение
А как же указанный мною double в выражении?
ты про это?
Цитата Сообщение от Fobos315 Посмотреть сообщение
s*=(1+(double)pow(1/2,2*n));
так это бесполезно pow и так возвращает double
смотри по шагам
2*n вычисляется целочисленное умножение оба аргумента целочисленные
1/2 вычисляется целочисленное деление оба аргумента целочисленные результат 0
в функцию pow передается два целочисленных аргумента
получаем pow(0,2) при n равной единице
результат 0
и только потом ты приводишь результат к double
нужно приводить аргументы
или как сказал
Цитата Сообщение от Firework Посмотреть сообщение
/2 даёт 0. Т.к. деление целочисленное. Замените на 1.0/2.
или так

C++
1
s*=(1+(double)pow((double)1/2,2*n));
кстати на моем VS2008 выдает ошибку при такой записи
C++
1
(1+(double)pow(1/2,2*n));
1>c:\users\noutdns\documents\visual studio 2008\projects\testproperty2008\testproperty2008\testproperty2008.cpp(74) : error C2668: pow: неоднозначный вызов перегруженной функции
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(575): может быть 'long double pow(long double,int)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(527): или 'float pow(float,int)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(489): или 'double pow(double,int)'
1> при попытке сопоставить список аргументов '(int, int)'
поскольку нет такой функции pow(int,int)
нужно явно приводить
1
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
30.07.2014, 22:03  [ТС] #7
Спасибо! все четко и ясно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2014, 22:03
Привет! Вот еще темы с ответами:

При вычислении степени получается результат 1.#INF - C++
Добрый день! При вычислении степени получается результат 1.#INF Нужно диагностировать эту ситуацию, т.е. выводить в программе...

почему выводит не так? (вывод произведения каждого столбца) - C++
мне нужно чтобы программа выводила произведение каждого столбца,а она выводит только первого #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Почему код не выводит результат? - C++
int const Y=20; int God, i; int MasY; void Year(){ for (i = 0; i &lt; Y; i++){ // Заполнение и вывод. MasY = rand() %...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.07.2014, 22:03
Ответ Создать тему
Опции темы

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