pow() из библиотеки math.h — Как применить с помощью функций

Итак, я пишу небольшой код, который должен возвести возвращаемое значение функции в определенную степень. Недавно я обнаружил, что использование оператора '^' для возведения в степень бесполезно, потому что в C++ это на самом деле оператор XOR или что-то в этом роде. Теперь вот код, который я хочу написать:

int answer = pow(base, raisingTo(power));


Теперь кто-нибудь может сказать мне, правильно ли это? Я объясню код. Я объявил ответ переменной int, как вы все знаете, и инициализировал ее значением любой переменной с именем «база», возведенной в возвращаемое значение функции raisingTo(), действующей на любую другую переменную с именем «мощность». Когда я делаю это (и я редактирую и компилирую свой код в Visual C++ 2010 Express Edition), под словом «pow» появляется красная черта и появляется сообщение об ошибке: «более одного экземпляра перегруженной функции« pow »соответствует аргументу list"

Может ли кто-нибудь решить эту проблему для меня? И не могли бы вы, ребята, также объяснить мне, как на самом деле работает вся эта функция pow(), потому что, честно говоря, ссылки на www.cplusplus.com немного сбивают с толку, так как я все еще только новичок!


person Ram Sidharth    schedule 18.02.2012    source источник
comment
Я не новичок в программировании, я только новичок в C++. Спасибо, Джоуи.   -  person Ram Sidharth    schedule 19.02.2012
comment
@Джои Ни за что. это требует хороших навыков программирования.   -  person Mike D    schedule 19.02.2012
comment
@RamSidharth Кроме того, из-за того, как ваш код написан выше, вы потеряете точность; в других случаях число, возвращаемое функцией pow(), будет усечено, и это нормально, если вы этого хотите. Кроме того, я считаю, что Visual Studio делает слишком много работы и мешает, когда не должна.   -  person Mike D    schedule 19.02.2012


Ответы (2)


В документации это уже довольно четко указано:

Перегрузка pow(int, int) больше недоступна. Если вы используете эту перегрузку, компилятор может выдать C2668 [EDIT: это ошибка, которую вы получаете]. Чтобы избежать этой проблемы, приведите первый параметр к типу double, float или long double.

Кроме того, для расчета базовоймощности достаточно написать

pow(base, power)

И с приведенной выше подсказкой:

int result = (int) pow((double)base, power);
person Joey    schedule 18.02.2012
comment
Большое спасибо за ответ, Джоуи. - person Ram Sidharth; 19.02.2012
comment
@Joey Было бы необходимо приведение возврата pow(), обычно С++ просто обрезал бы значение, идущее в ответ. Или это VS мешает? - person Mike D; 19.02.2012
comment
Майк Д: Без понятия. Я думаю, что в C вам придется бросить. Я понятия не имею, необходимо ли это в C++. - person Joey; 19.02.2012

Функция pow() возвращает либо double, либо float, поэтому первым шагом будет изменение answer на одно из них. Во-вторых, что возвращает raisingTo(). Если вы не делаете что-то неочевидное, вам это не нужно, но оно все равно должно работать. Кроме того, оба аргумента должны быть doubles в соответствии с этим.

person Mike D    schedule 18.02.2012
comment
Большое спасибо за ваш ответ, Майк Д. - person Ram Sidharth; 19.02.2012