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

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

Восстановить пароль Регистрация
 
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
30.07.2014, 15:34     Почему выводит неверный результат при вычислении произведения? #1
Еще 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
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Firework
57 / 81 / 21
Регистрация: 01.04.2013
Сообщений: 567
30.07.2014, 15:47     Почему выводит неверный результат при вычислении произведения? #2
1/2 даёт 0. Т.к. деление целочисленное. Замените на 1.0/2.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 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;
}
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 684
30.07.2014, 16:09     Почему выводит неверный результат при вычислении произведения? #4
pow(1/2,2*n) = 0 возвести в 2*n степень. Второй пост прочитайте, вам человек объяснил.
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
30.07.2014, 21:03  [ТС]     Почему выводит неверный результат при вычислении произведения? #5
А как же указанный мною double в выражении?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
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)
нужно явно приводить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2014, 22:03     Почему выводит неверный результат при вычислении произведения?
Еще ссылки по теме:

При значении больше 10 выводит неверный результат C++
C++ Почему в выходной файл выводит неправильный результат?
C++ Почему код не выводит результат?

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

Или воспользуйтесь поиском по форуму:
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
30.07.2014, 22:03  [ТС]     Почему выводит неверный результат при вычислении произведения? #7
Спасибо! все четко и ясно
Yandex
Объявления
30.07.2014, 22:03     Почему выводит неверный результат при вычислении произведения?
Ответ Создать тему
Опции темы

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