C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のscalbn()関数とは?使い方とサンプルコードをわかりやすく解説

本記事では、C++ STLで提供されている scalbn() 関数の仕組み、構文、そして具体的な使用例について詳しく解説します。

scalbn()関数とは?

scalbn() はC++ STLに標準で組み込まれた数学関数の一つで、<cmath> ヘッダーファイル内で定義されています。この関数は、仮数(significand)を浮動小数点基数のべき乗を使って効率的にスケーリング(拡大・縮小)するために使用されます。

ここでいう仮数とは、浮動小数点数を構成する有効数字の部分を指します。指数の解釈によって、仮数は整数としても小数としても表現できます。

scalbn() 関数は、「num × FLT_RADIXn」という計算を行います。FLT_RADIXはすべての浮動小数点データ型における基数(多くの環境では2)であり、numは仮数の値、nは指数値です。なお、同様の機能を持つ関数として、第2引数がlong型である scalbln() や、内部的に同じ演算を行う ldexp() などもあります。

構文

double scalbn( double num, int n );
float scalbn( float num, int n );
long double scalbn( long double num, int n );

引数の型に応じて、上記のようにオーバーロードされた複数のバージョンが用意されています。

パラメータ

この関数は、次の引数を受け取ります。

  • num − スケーリング対象となる仮数の値です。
  • n − 基数を掛ける回数を示す指数の値です(int型)。

戻り値

計算が成功した場合、num × FLT_RADIXn の結果を返します。エラーが発生した場合には、math_errhandling に従ってエラー処理が行われます。

使用例

基本的な呼び出し

入力

scalbn(5, 7);

出力

640

これは「5 × 27 = 640」という計算に相当します。

サンプルコード1:int型の値を使用する場合

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a = 7;
    int b = 5;
    int hold;
    hold = scalbn(b, a);
    cout << "Equation is: " << b << " * " << FLT_RADIX << "^" << a << " = " << hold << endl;
    return 0;
}

出力

Equation is: 5 * 2^7 = 640

サンプルコード2:float型の値を使用する場合

#include <bits/stdc++.h>
using namespace std;
int main(){
    float a = 2.3;
    float b = 7.8;
    float hold;
    hold = scalbn(b, a);
    cout << "Equation is: " << b << " * " << FLT_RADIX << "^" << a << " = " << hold << endl;
    return 0;
}

出力

Equation is: 7.8 * 2^2 = 31.2

なお、第2引数の指数はint型として定義されているため、float型の 2.3 を渡すと小数部分が切り捨てられ、2 として扱われます。そのため、計算結果は「7.8 × 22 = 7.8 × 4 = 31.2」となります。

まとめ

scalbn() 関数は、仮数と基数のべき乗を掛け合わせるシンプルながら有用な関数です。特に、2のべき乗による高速な乗除算が必要な場面や、浮動小数点数の正規化処理などで活躍します。引数の型(特に指数がint型である点)に注意しながら活用しましょう。

  1. C++のlog()関数とは?自然対数を求める方法をわかりやすく解説

    C++の標準ライブラリには、数学的な計算を行うための便利な関数が多数用意されています。その中でもlog()関数は、数値の自然対数(ネイピア数 e を底とする対数)を求めるために使用される重要な関数です。log()関数の基本情報C/C++のライブラリ関数 double log(double x) は、引数 x の自然対数(底が e の対数)を返します。この関数を使用するには、ヘッダーファイル <cmath> をインクルードする必要があります。関数の宣言double log(double x)パラメータと戻り値パラメータ: x は浮動小数点型(double)の値です。自然対数を求めたい

  2. C++のswap()関数とは?2つの変数の値を入れ替える方法をサンプルコード付きで解説

    swap()関数とは C++のswap()関数は、2つの値を入れ替える(交換する)ための関数です。この関数を利用すれば、一時的な第三の変数を自分で用意することなく、2つの変数の値を簡単に入れ替えることができます。 swap()関数の構文 void swap(int variable_name1, int variable_name2); 変数に値を代入してswap()関数に渡した場合、関数内では値の入れ替えが行われますが、呼び出し元の実際の変数の値は変わりません。これは、引数が「値渡し」で渡されるためです。実際の変数の値を入れ替えたい場合は、後述する「参照渡し」を使用します。 例1:s