Cで累乗をどのように行いますか?

pow を使用 関数 (float かかります) s/double

man pow :

   #include <math.h>

   double pow(double x, double y);
   float powf(float x, float y);
   long double powl(long double x, long double y);

編集 :2 の正の整数べき乗の特殊なケースの場合 、ビットシフトを使用できます:(1 << x) 2 に等しくなります x の累乗 .これには潜在的な落とし穴がいくつかありますが、一般的には正しいでしょう。


Evan の発言に付け加えると、C には累乗の組み込み演算子がありません。これは、ほとんどの CPU にとってプリミティブな操作ではないためです。そのため、ライブラリ関数として実装されています。

また、関数 e^x を計算するには、 exp(double) を使用できます 、 expf(float) 、および expl(long double) 関数。

しないことに注意してください ^ を使いたい ビットごとの排他的 OR である演算子


pow 浮動小数点数 (double) でのみ機能します s、実際に)。整数の累乗を取りたいが、基数が 2 の指数であることがわかっていない場合 、自分でロールバックする必要があります。

通常は愚かな方法で十分です。

int power(int base, unsigned int exp) {
    int i, result = 1;
    for (i = 0; i < exp; i++)
        result *= base;
    return result;
 }

O(log n) かかる再帰的なソリューションを次に示します。 簡単な O(1) の代わりに空間と時間 スペース O(n) 時間:

int power(int base, int exp) {
    if (exp == 0)
        return 1;
    else if (exp % 2)
        return base * power(base, exp - 1);
    else {
        int temp = power(base, exp / 2);
        return temp * temp;
    }
}