数学的な関数

y = (√sin x)^3


ここでは、C++ 標準ライブラリに入ってる数学的な関数を解説するよ。

理論的な処理をするときは、それなりの頻度で使う。

cmath

C++ では、double (とその他の型) で計算する数学の関数が用意されている。

それらを使うには、cmath ファイルを #include する必要があるよ。

#include <cmath>

以下のコードを動かすときは ↑ を忘れないでね。

pow

std::pow(x, y) のときに x の y 乗 を計算する。英語で power (~乗) の略。

std::cout << "2 ^ 3 = " << std::pow(2, 3)
  << "\n8 ^ 1.2 = " << std::pow(8, 1.2)
  << "\n4 ^ 0.5 = " << std::pow(4, 0.5);

sqrt

引数の平方根 (英語で Square-root を略して sqrt) を計算する。

std::cout << "√9 = " << std::sqrt(9)
  << "\n√8 = " << std::sqrt(8)
  << "\n√-1 = " << std::sqrt(-1);
  // sqrt(-1) は Not A Number エラーになる

round / ceil / floor / trunc

小数を整数にする関数 4 つをまとめて紹介。

round (日本語で丸める) は四捨五入を計算する。負の数でも 0 から遠い方向に丸める。

using std::round;
round(2.0); // 2
round(2.1); // 2
round(2.5); // 3
round(2.9); // 3
round(-2.0); // -2
round(-2.1); // -2
round(-2.5); // -3
round(-2.9); // -3

ceil (日本語で天井) は天井関数。その数以上の整数にする。

using std::ceil;
ceil(2.0); // 2
ceil(2.1); // 3
ceil(2.5); // 3
ceil(2.9); // 3
ceil(-2.0); // -2
ceil(-2.1); // -2
ceil(-2.5); // -2
ceil(-2.9); // -2

floor (日本語で床) は床関数。その数以下の整数にする。

using std::floor;
floor(2.0); // 2
floor(2.1); // 2
floor(2.5); // 2
floor(2.9); // 2
floor(-2.0); // -2
floor(-2.1); // -3
floor(-2.5); // -3
floor(-2.9); // -3

trunc (truncate は日本語で切り捨て) は切り捨て関数。小数点以下を消す。

using std::trunc;
trunc(2.0); // 2
trunc(2.1); // 2
trunc(2.5); // 2
trunc(2.9); // 2
trunc(-2.0); // -2
trunc(-2.1); // -2
trunc(-2.5); // -2
trunc(-2.9); // -2

全部覚えなくてもいいけど、小数に 4 種類の丸め方があることを知ってたら幸せになれるかも。

sin / cos / tan

みんな大好き三角関数。引数の単位はラジアンだから注意。

std::sin(3.14); // だいたい 0
std::sin(1.57); // だいたい 1

std::cos(3.14); // だいたい -1
std::cos(1.57); // だいたい 0

std::tan(3.14); // だいたい 0
std::tan(1.57); // だいたい inf

他にもいろんな関数がある。日本語のサイトだと ここ とか見るといいかも。

numeric

int のような整数について計算する関数もあるけれど、これらは numeric にある。

#include <numeric>

以下のコードを動かすときは ↑ を忘れないでね。

gcd

gcd (Greatest Common Divisor の略) は最大公約数を計算する。

using std::gcd;
gcd(2, 3); // 1
gcd(6, 12); // 6
gcd(36, 48); // 12

lcm

lcm (Least Common Multiple の略) は最小公倍数を計算する。

using std::lcm;
lcm(2, 3); // 6
lcm(6, 12); // 12
lcm(36, 48); // 144