Что такое функция C ++ для возведения числа в степень? - PullRequest
99 голосов
/ 10 мая 2009

Как мне повысить число до степени?

2^1

2^2

2^3

и т.д ...

Ответы [ 16 ]

122 голосов
/ 10 мая 2009

pow () в cmath библиотеке. Подробнее здесь . Не забудьте поставить #include<cmath> вверху файла.

87 голосов
/ 10 мая 2009

std::pow в заголовке <cmath> имеет следующие перегрузки:

pow(float, float);
pow(float, int);
pow(double, double); // taken over from C
pow(double, int);
pow(long double, long double);
pow(long double, int);

Теперь вы не можете просто сделать

pow(2, N)

с N, являющимся int, потому что он не знает, какую из float, double или long double версии он должен принять, и вы получите ошибку неоднозначности. Всем трем потребуется преобразование из int в число с плавающей запятой, и все три одинаково дороги!

Поэтому обязательно наберите первый аргумент, чтобы он идеально совпадал с одним из этих трех. Я обычно использую double

pow(2.0, N)

Какой-то адвокат дерьмо от меня снова. Я сам часто попадал в эту ловушку, поэтому собираюсь предупредить вас об этом.

18 голосов
/ 20 мая 2015

В C ++ оператор «^» является побитовым ИЛИ. Это не работает для повышения власти. X << n - это сдвиг влево двоичного числа, которое совпадает с умножением x на 2 n раз и может использоваться только при увеличении 2 до степени. Функция POW - это математическая функция, которая будет работать в общем. </p>

14 голосов
/ 10 мая 2009

Используйте функцию pow (x, y): См. Здесь

Просто включите math.h и все готово.

13 голосов
/ 10 мая 2009

Вы должны быть в состоянии использовать обычные методы C в математике.

#include <cmath>

pow(2,3)

если вы работаете в Unix-подобной системе, man cmath

Это то, что вы спрашиваете?

Sujal

11 голосов
/ 10 мая 2009

Хотя pow( base, exp ) - отличное предложение, имейте в виду, что оно обычно работает с плавающей запятой.

Это может или не может быть тем, что вы хотите: в некоторых системах простой цикл умножения на аккумулятор будет быстрее для целых типов.

В частности, для квадрата вы можете просто умножить числа вместе, с плавающей точкой или на целое число; на самом деле это не снижение читабельности (IMHO), и вы избегаете снижения производительности при вызове функции.

9 голосов
/ 08 октября 2015

У меня недостаточно репутации, чтобы комментировать, но если вам нравится работать с QT, у них есть собственная версия.

    #include <QtCore/qmath.h>
    qPow(x, y); // returns x raised to the y power.

Или, если вы не используете QT, cmath имеет в основном то же самое.

    #include <cmath>
    double x = 5, y = 7; //As an example, 5 ^ 7 = 78125
    pow(x, y); //Should return this: 78125
6 голосов
/ 02 декабря 2014
#include <iostream>
#include <conio.h>

using namespace std;

double raiseToPow(double ,int) //raiseToPow variable of type double which takes arguments (double, int)

void main()
{
    double x; //initializing the variable x and i 
    int i;
    cout<<"please enter the number"; 
    cin>>x;
    cout<<"plese enter the integer power that you want this number raised to";
    cin>>i;
    cout<<x<<"raise to power"<<i<<"is equal to"<<raiseToPow(x,i);
}

// определение функции liftToPower

double raiseToPow(double x, int power)
{
    double result;
    int i;
    result =1.0;
    for (i=1, i<=power;i++)
    {
        result = result*x;
    }
    return(result);
}
4 голосов
/ 01 августа 2018

, если вы хотите иметь дело только с base_2 , тогда я рекомендую использовать оператор левого смещения << </em> вместо математическая библиотека .

пример кода:

int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}

пример вывода:

1   2   4   8   16  32  64  128  256  512  1024  2048  4096  8192  16384  32768
4 голосов
/ 30 июля 2018

Во многих ответах предлагается pow() или аналогичные альтернативы или их собственные реализации. Однако, учитывая примеры (2^1, 2^2 и 2^3) в вашем вопросе, я бы догадался, нужно ли вам повышать 2 до целой степени. Если это так, я бы предложил вам использовать 1 << n для 2^n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...