Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 04.08.2016
Сообщений: 96

For power int double что за результат?

04.08.2016, 15:23. Показов 1534. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не понимаю что не так, помогите((((

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <iostream>
#include "locale.h"
#include<cmath>
 
int main()
{
    using namespace std;
    setlocale(LC_ALL, "RUS");
    int n, k;
    double sum=0;
    cout << "Введите N; ";
    cin >> n;
    cout << "Введите К: ";
    cin >> k;
    for (int i = 0; i < n; i++) {
        sum += pow(i, k);
    }
    int i = sum;
    cout << i;
    system("pause");
    
 
 
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2016, 15:23
Ответы с готовыми решениями:

Напишите функцию double power(double a, int n), вычисляющую значение a^n
Чем мой код отличается от библиотечной функции pow()? #include &lt;stdio.h&gt; double power(double a, unsigned n) { int i; double...

При умножении значения double на int и присвоения его результата на double, результат выходит неправильным
Здравствуйте. Есть такая проблема. При умножении значения double на int и присвоения его результата на double, результат выходить...

Написать функцию int Search ( double A[], int n , double x), которая находит в массиве double A[n] элемент, значение которого равно x
Написать функцию int Search ( double A, int n , double x), которая находит в массиве double A элемент, значение которого равно x. Функция...

17
Одессит
 Аватар для kylroma
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
04.08.2016, 15:36
тоже не могу понять что не так. В чём конкретно проблема?
C++
1
2
int i = sum;
    cout << i;
Переменная i тут лишняя. Не проще написать:
C++
1
cout << sum;
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,553
04.08.2016, 15:41
Есть три версии функции pow:
C++
1
2
3
long double pow(long double,int)
float pow(float,int)
double pow(double,int)
Как видно, первый параметр - число с плавающей точкой. А у тебя - int. Компилятор не может решить, какую из этих трёх вызывать. Надо решить за него:
C++
1
sum += pow(double(i), k);
1
0 / 0 / 1
Регистрация: 04.08.2016
Сообщений: 96
04.08.2016, 15:44  [ТС]
Спасибо большое!) Нашла решение, слепо сделала, как там написано, теперь, благодаря вам, знаю что да почему)
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.08.2016, 15:45
Цитата Сообщение от kindertei Посмотреть сообщение
int i = sum;
double превращаешь в int, не боишься переполнения?
Цитата Сообщение от kindertei Посмотреть сообщение
pow(i, k);
аргументы два int, функция pow не определена для двух int
нужно один аргумент привести к double или flot
например так
C++
1
sum += pow((double )i, k);
0
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
04.08.2016, 15:47
Цитата Сообщение от John Prick Посмотреть сообщение
Компилятор не может решить
тут нету спорной ситуации, есть правила и по ним инт будет расширен, без потери данных.
0
Одессит
 Аватар для kylroma
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
04.08.2016, 15:49
John Prick, а разве не будет приведения типа int к double? Какая тут может быть ошибка?
1
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
04.08.2016, 15:50
Цитата Сообщение от ValeryS Посмотреть сообщение
функция pow не определена для двух int
вы хотите мне сказать, что такой код не скомпилируется или выдаст неверный результат?
он в состоянии скастать int в double неявно
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include<cmath>
 
int main()
{
    int a = 2, b = 10;
    double result = pow(a, b);
    std::cout << result;
 
    return 0;
}
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.08.2016, 15:58
Цитата Сообщение от Babysitter Посмотреть сообщение
вы хотите мне сказать, что такой код не скомпилируется
не скомпилируется, поскольку нет функции pow(int,int)
Цитата Сообщение от Babysitter Посмотреть сообщение
он в состоянии скастать int в double неявно
в состоянии,но как сказал John Prick,
Цитата Сообщение от John Prick Посмотреть сообщение
C++
1
2
3
long double pow(long double,int)
float pow(float,int)
double pow(double,int)
к чему кастить будем к long double? к double? к float?
компилятор сам решить не в состоянии
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
04.08.2016, 16:04
Однако, он берет на себя смелость, и решает... Может только тихо ворчит ворнингами типа "сами не знають чего хочуть!"....
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.08.2016, 16:07
Цитата Сообщение от _Ivana Посмотреть сообщение
Однако, он берет на себя смелость, и решает...
не надо говорить за все GCC может и решает а вот VC точно ошибку дает
0
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
04.08.2016, 16:09
Цитата Сообщение от ValeryS Посмотреть сообщение
VC точно ошибку дает
можно узнать, какая версия, 2010?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
04.08.2016, 16:09
У каждой страны свои обычаи (Английская народная пословица) Был бы один мейнстримный компилятор, как в иных странах языках - проблем бы не было
0
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
04.08.2016, 16:11
не должно быть там даже и варнингов. шаблонная функция обертка вроде там, она оба аргумента сама скастает в наиболее подходящий тип и вызовет нужную реализацию. но вы уже поколебали мою уверенность.
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,553
04.08.2016, 16:12
Цитата Сообщение от Babysitter Посмотреть сообщение
тут нету спорной ситуации, есть правила и по ним инт будет расширен, без потери данных.
Внимательнее смотрим. У функции 3 перегрузки. Во что int расширять: float, double или long double?
Цитата Сообщение от kylroma Посмотреть сообщение
а разве не будет приведения типа int к double? Какая тут может быть ошибка?
Почему именно к double, а не к float или long double?
0
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
04.08.2016, 16:17
это правда, vs2010 говорит мол ambiguous call
все, что свежее не показывает даже предупреждений

c++98
C++
1
2
3
4
5
     double pow (double base     , double exponent);
      float pow (float base      , float exponent);
      long double pow (long double base, long double exponent);
     double pow (double base     , int exponent);
     long double pow (long double base, int exponent);
c++11
C++
1
2
3
4
     double pow (double base     , double exponent);
      float pow (float base      , float exponent);
      long double pow (long double base, long double exponent);
     double pow (Type1 base      , Type2 exponent);        // additional overloads
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.08.2016, 16:19
вот здесь ошибка
http://codepad.org/QFoTGUG5
C++
1
2
3
4
5
6
7
8
#include<cmath>
int main()
{
int a=5,b=10;
double c=pow(a,b);
 
 
}
0
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
04.08.2016, 17:58
не поленюсь, обобщу все еще раз, на случай, если мои посты никто не читал.
при перегрузке такая проблема существует, невозможно определить, какая именно реализация функции должна быть использована, какое именно приведение типов нужно использовать. в стандарте 98 реализация функции pow была простой - перегружена следующими вариантами реализации.
C++
1
2
3
float pow( float base, float exp );
double pow( double base, double exp );
long double pow( long double base, long double exp );
однако начиная с С++11, мы получаем несколько дополнительных прототипов
C++
1
2
3
4
float pow( float base, int iexp );
double pow( double base, int iexp );
long double pow( long double base, int iexp );
Promoted pow( Arithmetic1 base, Arithmetic2 exp );
по сути теперь, если входные параметры не совпадают с первыми тремя, то будет вызвана некая общая реализация, которая осуществит приведение типов и вызовет нужную версию из имеющихся. Если у аргумента интеграл тип, то мы получаем каст в дабл, если хотя бы один лонг дабл, то функция вернет лонг дабл, во всех остальных случаях возвращаем дабл.

новые gcc и clang с флагами -std=c++98 -pedantic-errors не показывают даже предупреждений, как и студии начиная с 2012 с дефолтными параметрами. однако компилятор, который идет с vs2010(а также любой другой компилятор со старой реализацией стандартной библиотеки) явно объясняет нам, что тут ambiguous call.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
#include <cmath>
#include <iostream>
 
int main()
{
    int a(2), b(10);
    double foo = pow(a, b);
    std::cout << foo << std::endl;
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2016, 17:58
Помогаю со студенческими работами здесь

Double to int, результат на 1 меньше ожидаемого
Здравствуйте! в программе были такие строчки кода: double a = 89.0; int b = a; qDebug() &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b; ...

Неверный результат при преобразования типов данных static_cast<int>(double)
Доброго времени суток, уважаемые программисты! Перейду сразу к сути проблемы: При данном значении вещественной переменной n (n=0.13) в...

требуетсяя изменить программу так что бы она считывала значения int а не double
вродибы у меня всё получилось кроме sqrt я изменил double n на double ns и под ним написал int n = ns; и получилось что выводило только...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Что делает строка int а = (1|2|3|4) и почему результат равен 7
Всем добрый день! Вопрос в шапке. Поиск в google ничего не дал. Заранее спасибо за ответ!


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru