C++ で数値を累乗する

胡金庫 2023年10月12日
  1. C++ で数値を累乗するには std::pow 関数を使用する
  2. カスタム関数を使って C++ で数値のベクトルを 2 の累乗
  3. C++ でカスタム関数を使用して数値のベクトルを累乗する
C++ で数値を累乗する

この記事では、C++ で数値を累乗する方法について複数の方法を示します。

C++ で数値を累乗するには std::pow 関数を使用する

関数 std::pow を用いると、指定された基底数を n の累乗で計算できます。この関数には複数の例外や特殊なケースがあり、プログラマが処理するか、C++ の <cmath> ライブラリヘッダで提供されている別の関数を用いて実装する必要があることに注意してください。例えば、pow は負数の根の計算には利用できないので、代わりに std::sqrtstd::cbrt を利用する必要があります。次の例では、int ベクトルの各要素を 3 の任意の累乗で累乗します。

#include <cmath>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::pow;
using std::vector;

template <typename T>
void PrintVector(vector<T> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<T>(cout, "; "));
  cout << endl;
}

constexpr int POWER = 3;

int main() {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  PrintVector(arr);
  for (auto &item : arr) {
    item = pow(item, POWER);
  }
  PrintVector(arr);

  return EXIT_SUCCESS;
}

出力:

1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
1; 8; 27; 64; 125; 216; 343; 512; 729; 1000;

カスタム関数を使って C++ で数値のベクトルを 2 の累乗

前述の方法の代わりに、標準機能を拡張するために pow 関数を用いて様々なカスタム関数を実装することもできます。この例では、vector コンテナを受け取り、その要素を 2 の累乗にする Pow2Vector 関数を示します。関数テンプレートの PrintVector はベクトルの要素をコンソールに出力します。

#include <cmath>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::pow;
using std::vector;

template <typename T>
void PrintVector(vector<T> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<T>(cout, "; "));
  cout << endl;
}

template <typename T>
vector<T> &Pow2Vector(vector<T> &arr) {
  for (auto &i : arr) {
    i = pow(i, 2);
  }
  return arr;
}

constexpr int POWER = 3;

int main() {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  PrintVector(Pow2Vector(arr));

  return EXIT_SUCCESS;
}

出力:

1; 4; 9; 16; 25; 36; 49; 64; 81; 100;

C++ でカスタム関数を使用して数値のベクトルを累乗する

前の方法の続きとして、基本的な関数を微調整して、指数値の追加引数を取ることができます。この方法では、基本的には vector の中の与えられた要素を我々が指定した乗まで受け取る関数を実装したことになります。テンプレート型の推論が機能するためには、変数 float/double を指数値として初期化し、それを PowVector 関数に渡す必要があることに注意してください。

#include <cmath>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::pow;
using std::vector;

template <typename T>
void PrintVector(vector<T> &arr) {
  copy(arr.begin(), arr.end(), ostream_iterator<T>(cout, "; "));
  cout << endl;
}

template <typename T>
vector<T> &PowVector(vector<T> &arr, T power) {
  for (auto &i : arr) {
    i = pow(i, power);
  }
  return arr;
}

constexpr int POWER = 3;

int main() {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  vector<float> arr2 = {1.2, 2.3, 3.2, 4.5, 5.5, 6.2, 7.1, 8.2, 9.0, 10.1};

  float power = 2.0;
  PrintVector(PowVector(arr, 5));
  PrintVector(PowVector(arr2, power));

  return EXIT_SUCCESS;
}

出力:

1; 32; 243; 1024; 3125; 7776; 16807; 32768; 59049; 100000;
1.44; 5.29; 10.24; 20.25; 30.25; 38.44; 50.41; 67.24; 81; 102.01;
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Math