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 - 1expm1(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;
}

出力結果:

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;
}

注意事項

  • <cmath>の関数は通常float 或 double型のパラメータを受け取り、対応する型の結果を返します。long double型の場合、<cmath>の関数を使用できますが、関数名の後にl接尾辞を付ける必要があります。例えばsqrtl。
  • 一部の関数、例えばpowとlogは整数をパラメータとして受け取ることができますが、結果は依然として浮動小数点数です。
  • <cmath>の関数は例外を投げる可能性があります。例えばsqrt関数のパラメータが負の数の場合、std::domain_error例外を投げます。
  • <cmath>は、C++ 標準ライブラリの中でも非常に便利なヘッダーファイルであり、多くの基本的な数学関数を提供し、開発者がプログラム作成時に数学演算を行うのに役立ちます。

    その他の拡張