什么是将数字提升到幂的C ++函数?

时间:2009-05-10 19:18:55

标签: c++ math

如何将数字提升到某个数字?

2^1

2^2

2^3

等...

17 个答案:

答案 0 :(得分:119)

在cmath库中的pow()。更多信息here。 不要忘记将#include放在顶部。

答案 1 :(得分:84)

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,因为它不知道应该采用哪个floatdoublelong double版本,并且会出现歧义错误。这三个都需要从int转换到浮点,这三个都是同样昂贵的!

因此,请务必键入第一个参数,以便完全匹配这三个参数中的一个。我通常使用double

pow(2.0, N)

有些律师废话了我。我自己经常陷入这个陷阱,所以我要警告你。

答案 2 :(得分:17)

在C ++中&#34; ^&#34;运算符是按位OR。它不适用于提升电力。 x <&lt;&lt; n是二进制数的左移,与x乘以2 n次相同,只能在将2加到幂时使用。 POW函数是一个通用的数学函数。

答案 3 :(得分:14)

使用pow(x,y)函数:See Here

只需包含math.h就可以了。

答案 4 :(得分:13)

你应该能够在数学中使用普通的C语法。

#include <cmath>

pow(2,3)

如果您使用的是类似unix的系统man cmath

这就是你问的问题吗?

Sujal

答案 5 :(得分:11)

虽然pow( base, exp )是一个很好的建议,但要注意它通常在浮点运行。

这可能是您想要的也可能不是:在某些系统上,对于整数类型,累加器上的简单循环乘法会更快。

对于square来说,你也可以自己将数字乘以浮点或整数;它并不是真正降低可读性(恕我直言),而是避免了函数调用的性能开销。

答案 6 :(得分:9)

我没有足够的声誉来评论,但如果您喜欢使用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

答案 7 :(得分:6)

#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);
}

//函数raiseToPower的定义

double raiseToPow(double x, int power)
{
    double result;
    int i;
    result =1.0;
    for (i=1, i<=power;i++)
    {
        result = result*x;
    }
    return(result);
}

答案 8 :(得分:4)

pow(2.0,1.0)
pow(2.0,2.0)
pow(2.0,3.0)

您的原始问题标题具有误导性。要 square ,请使用2*2

答案 9 :(得分:4)

<math.h>

中的pow或powf

没有像Visual Basic或Python中那样的特殊中缀运算符

答案 10 :(得分:3)

请注意,使用pow(x,y)效率低于x*x*x次,如图所示,并在此处回答https://stackoverflow.com/a/2940800/319728

因此,如果您希望提高效率x*x*x

答案 11 :(得分:3)

许多答案都建议使用pow()或类似的替代方法或自己的实现。但是,考虑到您的问题中的示例(2^12^22^3),我想您是否仅需要将2提升为整数幂。如果是这种情况,我建议您将1 << n用于2^n

答案 12 :(得分:3)

如果您只想处理 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

答案 13 :(得分:1)

int power (int i, int ow) // works only for ow >= 1
{ // but does not require <cmath> library!=)
    if (ow > 1)
    {
         i = i * power (i, ow - 1);
    }
    return i;
}

cout << power(6,7); //you can enter variables here

答案 14 :(得分:1)

我正在使用图书馆cmathmath.h,以便利用照顾权力的pow()图书馆功能

#include<iostream>
#include<cmath>

int main()
{
    double number,power, result;
    cout<<"\nEnter the number to raise to power: ";
    cin>>number;
    cout<<"\nEnter the power to raise to: ";
    cin>>power;

    result = pow(number,power);

    cout<<"\n"<< number <<"^"<< power<<" = "<< result;

    return 0;
}

答案 15 :(得分:1)

在cmath,tgmath或math.h库中使用pow()函数。

&&

请注意,如果您以长整型以外的任何数据类型来输入功率,则答案将提升为双精度。也就是说,它将接受输入,并将输出加倍。对于long double输入,返回类型为long double。用于将答案更改为int使用,     int c =(int)pow(a,b)

但是,请记住某些数字,这可能导致数字小于正确答案。因此,例如,您必须计算5 ^ 2,则在某些编译器上,答案可以返回为24.99999999999。将数据类型更改为int时,正确答案将是24,而不是25。所以,这样做

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int a,b;
cin >> a >> b;
cout << pow(a,b) << endl; // this calculates a^b

return 0;
}

现在,您的答案将是正确的。 同样,对于非常大的数字,将数据类型更改为double到long long int会丢失数据。 例如你写

int c=(int)(pow(a,b)+0.5)

并给定输入a = 3和b = 38 那么结果将是1350851717672992000,而正确答案是1350851717672992089,这是因为pow()函数返回1.35085e + 18,其提升为int的形式是1350851717672992000。我建议针对此类情况编写自定义幂函数,例如:-

long long int c=(long long int)(pow(a,b)+0.5);

然后在需要时调用它,

long long int __pow (long long int a, long long int b)
{
long long int q=1;
for (long long int i=0;i<=b-1;i++)
{
q=q*a;
}

return q;
}

对于大于long long int范围的数字,请使用boost库或字符串。

答案 16 :(得分:0)

首先添加#include <cmath>,然后添加 您可以在代码中使用 pow 方法,例如:

Pow(3.5, 3);

3.5 base 3 exp < / strong>