C++ 標準ライブラリ<cmath>
C++ 標準ライブラリは豊富な機能を提供しており、その中で<cmath>は数学関数を含むヘッダーファイルであり、多くの基本的な数学演算と定数を提供します。
<cmath>は C++ 標準ライブラリ内のヘッダーファイルであり、べき乗演算、三角関数、対数、絶対値などの基本的な数学演算を実行できる一連の数学関数を定義しています。
使用するには<cmath>の関数を使用するには、C++ プログラムにこのヘッダーファイルを含める必要があります:
#include <cmath>
よく使われる関数
<cmath>多くの数学関数を提供しています。以下はよく使われる関数の一部です。
1. 基本数学関数
| 関数 | 機能 | 例 |
|---|---|---|
abs(x) | 整数を計算するxの絶対値 | abs(-5) // 5 |
fabs(x) | 浮動小数点数を計算するxの絶対値 | fabs(-5.5) // 5.5 |
fmod(x, y) | 計算するxで割るyの余り | fmod(5.3, 2) // 1.3 |
remainder(x, y) | 計算するxで割るyの余り | remainder(5.5, 2) // 1.5 |
fmax(x, y) | 返すxとyの中の大きい方の値 | fmax(3.5, 4.2) // 4.2 |
fmin(x, y) | 返すxとyの中の小さい方の値 | fmin(3.5, 4.2) // 3.5 |
hypot(x, y) | 計算するsqrt(x*x + y*y) | hypot(3, 4) // 5 |
2. 指数・対数関数
| 関数 | 機能 | 例 |
|---|---|---|
exp(x) | 計算するe^x,eが自然対数の底である | exp(1) // 2.71828... |
log(x) | 計算するxの自然対数 | log(2.71828) // 1 |
log10(x) | 計算するxの10を底とする対数 | log10(100) // 2 |
pow(x, y) | 計算するxのy乗 | pow(2, 3) // 8 |
sqrt(x) | 計算するxの平方根 | sqrt(16) // 4 |
cbrt(x) | 計算するxの立方根 | cbrt(27) // 3 |
expm1(x) | 計算するe^x - 1 | expm1(1) // 1.71828... |
log1p(x) | 計算するlog(1 + x)、xが0に近い場合に適用される | log1p(0.00001) // 0.00001 |
3. 三角関数
| 関数 | 機能 | 例 |
|---|---|---|
sin(x) |
計算するxの正弦値、xラジアン単位です |
sin(3.14159 / 2) // 1 |
cos(x) |
計算するxの余弦値、xラジアン単位です |
cos(3.14159) // -1 |
tan(x) |
計算するxの正接値、xラジアン単位です |
tan(0) // 0 |
asin(x) |
計算するxの逆正弦値、ラジアンを返す |
asin(1) // 3.14159/2 |
acos(x) |
計算するxの逆余弦値、ラジアンを返す |
acos(-1) // 3.14159 |
atan(x) |
計算するxの逆正接値、ラジアンを返す |
atan(1) // 3.14159/4 |
atan2(y, x) |
計算するy/xの逆正接値、ラジアンを返す |
atan2(1, 1) // 3.14159/4 |
4. 双曲線関数
| 関数 | 機能 | 例 |
|---|---|---|
sinh(x) |
計算するxの双曲線正弦 |
sinh(0) // 0 |
cosh(x) |
計算するxの双曲線余弦 |
cosh(0) // 1 |
tanh(x) |
計算するxの双曲線正接 |
tanh(1) // 0.7616 |
asinh(x) |
計算するxの逆双曲線正弦 |
asinh(1) // 0.8814 |
acosh(x) |
計算するxの逆双曲線余弦、x ≥ 1 |
acosh(1) // 0 |
atanh(x) |
計算するxの逆双曲線正接、xは (-1, 1) の範囲で |
atanh(0.5) // 0.5493 |
5. 丸めと浮動小数点操作
| 関数 | 機能 | 例 |
|---|---|---|
ceil(x) |
以上を返すxの最小整数 |
ceil(2.3) // 3 |
floor(x) |
以下を返すxの最大整数 |
floor(2.3) // 2 |
trunc(x) |
小数部分を除いた整数値を返す | trunc(2.8) // 2 |
round(x) |
最も近い整数に四捨五入した値を返す | round(2.5) // 3 |
lround(x) |
に四捨五入して返すlong型 |
lround(2.5) // 3 |
llround(x) |
に四捨五入して返すlong long型 |
llround(2.5) // 3 |
nearbyint(x) |
最も近い整数に丸めて返す(ただし浮動小数点例外は発生しない) | nearbyint(2.5) // 2 |
rint(x) |
現在の丸め方式に従って整数に四捨五入して返す | rint(2.5) // 3 |
modf(x, &intpart) |
将 xの整数部と小数部に分離する |
modf(2.3, &intpart) |
6. 浮動小数点チェック
| 関数 | 機能 | 例 |
|---|---|---|
isfinite(x) |
チェックするxが有限値(無限大でもNaNでもない)かどうか |
isfinite(3.0) // true |
isinf(x) |
チェックするxが無限大かどうか |
isinf(1.0 / 0.0) // true |
isnan(x) |
チェックするxがNaNかどうか |
isnan(0.0 / 0.0) // true |
isnormal(x) |
チェックするxが正常な非ゼロ浮動小数点数かどうか |
isnormal(1.0) // true |
signbit(x) |
チェックするxの符号が負かどうか |
signbit(-5.3) // true |
例
以下は使用<cmath>の簡単な例で、ある数の平方根、正弦値、絶対値を計算する方法を示しています。
例 1
#include <iostream>
#include <cmath> // <cmath> ヘッダーファイルを含む
int main() {
double num = 9.0;
double root = sqrt(num); // 平方根を計算
double sinValue = sin(M_PI / 2); // 正弦値を計算。M_PI は π の近似値
double absValue = abs(-5.0); // 絶対値を計算
std::cout << "The square root of " << num << " is " << root << std::endl;
std::cout << "The sine of " << M_PI / 2 << " is " << sinValue << std::endl;
std::cout << "The absolute value of -5.0 is " << absValue << std::endl;
return 0;
}
#include <cmath> // <cmath> ヘッダーファイルを含む
int main() {
double num = 9.0;
double root = sqrt(num); // 平方根を計算
double sinValue = sin(M_PI / 2); // 正弦値を計算。M_PI は π の近似値
double absValue = abs(-5.0); // 絶対値を計算
std::cout << "The square root of " << num << " is " << root << std::endl;
std::cout << "The sine of " << M_PI / 2 << " is " << sinValue << std::endl;
std::cout << "The absolute value of -5.0 is " << absValue << std::endl;
return 0;
}
出力結果:
The square root of 9 is 3 The sine of 1.570796 is 1 The absolute value of -5 is 5
例 2
#include <iostream>
#include <cmath>
int main() {
// 基本的な数学演算
std::cout << "abs(-5) = " << abs(-5) << std::endl;
std::cout << "fmod(5.3, 2) = " << fmod(5.3, 2) << std::endl;
// 指数・対数関数
std::cout << "exp(1) = " << exp(1) << std::endl;
std::cout << "log(2.71828) = " << log(2.71828) << std::endl;
std::cout << "pow(2, 3) = " << pow(2, 3) << std::endl;
// 三角関数
std::cout << "sin(3.14159 / 2) = " << sin(3.14159 / 2) << std::endl;
std::cout << "cos(3.14159) = " << cos(3.14159) << std::endl;
// 丸め関数
std::cout << "ceil(2.3) = " << ceil(2.3) << std::endl;
std::cout << "floor(2.3) = " << floor(2.3) << std::endl;
// 浮動小数点チェック
double x = 1.0 / 0.0;
if (isinf(x)) {
std::cout << "x is infinite" << std::endl;
}
return 0;
}
#include <cmath>
int main() {
// 基本的な数学演算
std::cout << "abs(-5) = " << abs(-5) << std::endl;
std::cout << "fmod(5.3, 2) = " << fmod(5.3, 2) << std::endl;
// 指数・対数関数
std::cout << "exp(1) = " << exp(1) << std::endl;
std::cout << "log(2.71828) = " << log(2.71828) << std::endl;
std::cout << "pow(2, 3) = " << pow(2, 3) << std::endl;
// 三角関数
std::cout << "sin(3.14159 / 2) = " << sin(3.14159 / 2) << std::endl;
std::cout << "cos(3.14159) = " << cos(3.14159) << std::endl;
// 丸め関数
std::cout << "ceil(2.3) = " << ceil(2.3) << std::endl;
std::cout << "floor(2.3) = " << floor(2.3) << std::endl;
// 浮動小数点チェック
double x = 1.0 / 0.0;
if (isinf(x)) {
std::cout << "x is infinite" << std::endl;
}
return 0;
}
注意事項
<cmath>の関数は通常float或double型のパラメータを受け取り、対応する型の結果を返します。long double型の場合、<cmath>の関数を使用できますが、関数名の後にl接尾辞を付ける必要があります。例えばsqrtl。- 一部の関数、例えば
powとlogは整数をパラメータとして受け取ることができますが、結果は依然として浮動小数点数です。 <cmath>の関数は例外を投げる可能性があります。例えばsqrt関数のパラメータが負の数の場合、std::domain_error例外を投げます。
<cmath>は、C++ 標準ライブラリの中でも非常に便利なヘッダーファイルであり、多くの基本的な数学関数を提供し、開発者がプログラム作成時に数学演算を行うのに役立ちます。