Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
1

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

30.07.2014, 15:34. Просмотров 1319. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2014, 15:34
Ответы с готовыми решениями:

При вычислении выражения выдается неверный результат
Добрый вечер! Пытался разобраться, но, увы, не получилось. У меня есть пару вопросов: 1) Что...

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

При значении больше 10 выводит неверный результат
При вводе чисел до 10, например 4 выводится результат 4 = 4.02725. Начина с 10 результат такой...

Не выводит результат при вычислении
program MySixthProgramm; var u,s,e:real; begin writeln('Введите E' ); readln(e); ...

6
98 / 90 / 35
Регистрация: 01.04.2013
Сообщений: 638
30.07.2014, 15:47 2
1/2 даёт 0. Т.к. деление целочисленное. Замените на 1.0/2.
0
Модератор
Эксперт С++
9502 / 8163 / 4987
Регистрация: 18.12.2011
Сообщений: 21,776
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
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
30.07.2014, 16:09 4
pow(1/2,2*n) = 0 возвести в 2*n степень. Второй пост прочитайте, вам человек объяснил.
0
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
30.07.2014, 21:03  [ТС] 5
А как же указанный мною double в выражении?
0
Модератор
8135 / 6012 / 798
Регистрация: 14.02.2011
Сообщений: 20,777
30.07.2014, 21:37 6
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от 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\v isual studio 2008\projects\testproperty2008 \testproperty2008\testproperty 2008.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
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
30.07.2014, 22:03  [ТС] 7
Спасибо! все четко и ясно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2014, 22:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Почему при поиске остатка числа выдает неверный результат?
Добрый вечер. Не могу понять в чем проблема. Нужно найти моду числа: double res2 = (Math.Pow(x,...

Почему изменение параметра шаблона при вызове функции даёт неверный результат?
Есть такой код: #include &lt;opencv2/highgui/highgui.hpp&gt; #include...

Запрос выводит неверный результат
Подскажите пожалуйста, вот мой код для запроса: ADOQuery1-&gt;Close(); ADOQuery1-&gt;SQL-&gt;Clear();...

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

Программа выводит неверный результат
Посчиать это выражение, n и m вводим с клавиатуры! \sum_{m}^{k=1}=n!/k!*(n-k)! Мой код,почему...

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


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

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

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