数値を累乗するにはどうすればよいですか?
2^1
2^2
2^3
等...
数値を累乗するにはどうすればよいですか?
2^1
2^2
2^3
等...
回答:
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
バージョンがわからないため、あいまいなエラーが発生するためです。3つすべてがintから浮動小数点への変換を必要とし、3つすべてが同様にコストがかかります。
したがって、必ず最初の引数を入力して、3つの引数のいずれかに完全に一致するようにしてください。私は通常使用しますdouble
pow(2.0, N)
何人かの弁護士がまた私からがらくた。私は自分でこの落とし穴に陥ることが多いので、警告します。
int N; pow(2.0, N)
まだあいまいです could be 'pow(double,int)' or 'pow(double,double)'
::-/→キャスト
std::pow(2.0, 3)
。
pow(2, N)
、C ++ 11以降、任意の算術型をパラメーターとして受け取るテンプレート関数があるため、これも一義的であると思います。
C ++では、「^」演算子はビット単位のORです。パワーアップには効きません。x << nは2進数の左シフトであり、xを2 n回乗算するのと同じであり、2を累乗する場合にのみ使用できます。POW関数は、一般的に機能する数学関数です。
1 << n
は、2のn乗、またはと同じ2^n
です。
1 << n
@AshishAhujaコメントの「1」がなぜなのかわからなかった人にとっては、シリーズがこのようになっている 1 << 0 = 1
から2^0 = 1
です。 1 << 1 = 2
以来2^1 = 2
; 1 << 2 = 4
以来、2^2 = 4
のように...
ながら pow( base, exp )
素晴らしい提案です、それは通常、浮動小数点で動作することに注意してください。
これは必要な場合とそうでない場合があります。一部のシステムでは、アキュムレータで乗算する単純なループが整数型の方が高速になります。
特に正方形の場合は、浮動小数点または整数のように、自分で数値を掛け合わせるだけでもよいでしょう。これは実際には読みやすさの低下(IMHO)ではなく、関数呼び出しのパフォーマンスオーバーヘッドを回避できます。
#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);
}
https://stackoverflow.com/a/2940800/319728に示され、回答されているように、の使用はy回pow(x,y)
よりも効率が悪いことに注意してください。x*x*x
ですから、効率的に使用する場合は、を使用してくださいx*x*x
。
ライブラリを使用している、cmath
または権限math.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;
}
cmath、tgmathまたはmath.hライブラリでpow()関数を使用します。
#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;
}
long double以外のデータ型としてpowerに入力を与えると、答えはdoubleの値に昇格されることに注意してください。つまり、入力を受け取り、出力をdoubleとして提供します。long double入力の場合、戻り値の型はlong doubleです。答えをint useに変更するには、int c =(int)pow(a、b)
ただし、一部の数値については、正解よりも少ない数値になる可能性があることに注意してください。したがって、たとえば5 ^ 2を計算する必要がある場合、一部のコンパイラでは24.99999999999として答えを返すことができます。データ型をintに変更すると、正しい答えは25ではなく24になります。だから、これをやって
int c=(int)(pow(a,b)+0.5)
今、あなたの答えは正しいでしょう。また、データ型をdoubleからlong long intに変更すると、非常に大きな数のデータが失われます。例えばあなたは書く
long long int c=(long long int)(pow(a,b)+0.5);
入力a = 3とb = 38を与えると、結果は1350851717672992000になりますが、正しい答えは1350851717672992089です。これは、pow()関数が1.35085e + 18を返し、1350851717672992000としてintに昇格されるためです。次のようなシナリオのカスタム電力関数:
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;
}
いつでも好きなときに呼び出します
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
long long intの範囲より大きい数値の場合は、ブーストライブラリまたは文字列を使用します。
__
は予約されています。おそらく別のものを選択する必要があります。