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

C/C++のldexp()関数とは?使い方とエラー処理を実例付きで解説

ldexp()関数の基本

本記事では、C/C++で利用できるldexp()関数の役割と具体的な使い方について解説します。ldexp()関数は、指定した値 x に「2のexp乗」を掛けた結果(x × 2exp)を返す数学関数です。引数としては、浮動小数点数の x と整数型の指数 exp の2つを受け取ります。

構文

ldexp()関数の構文は以下の通りです。引数の型に応じて複数のオーバーロードが用意されています。

float ldexp(float x, int exp)
double ldexp(double x, int exp)
long double ldexp(long double x, int exp)
double ldexp(T x, int exp)

基本的な使用例

それでは、実際のコード例を見てみましょう。以下のプログラムでは、10 × 22 を計算しています。

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    double a = 10, res;
    int exp = 2;
    res = ldexp(a, exp); // a × (2^exp) を計算
    cout << "The result is = " << res << endl;
}

実行結果

The result is = 40

この例では、10 × 22 = 40 が正しく出力されていることが分かります。

エラー処理:結果が大きすぎる場合

続いて、この関数で発生しうるエラーについて確認しましょう。計算結果が浮動小数点型で表現可能な範囲を超える場合、ldexp()関数は HUGE_VAL を返します。HUGE_VAL は無限大(inf)として出力されます。

以下に、意図的にオーバーフローを発生させる例を示します。

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    double a = 10, res;
    int exp = 5000;
    res = ldexp(a, exp); // a × (2^exp) を計算
    cout << "The result is = " << res << endl;
}

実行結果

The result is = inf

指数として5000を指定したため、結果が double 型で表現できる範囲を超え、戻り値が inf(HUGE_VAL)になっています。このように、ldexp()を使用する際は、指数の大きさによって結果がオーバーフローする可能性があることに注意が必要です。必要に応じて戻り値のチェックを行い、適切なエラー処理を実装することをおすすめします。

  1. C/C++のmbsrtowcs()関数とは?構文・パラメータ・戻り値と実例を解説

    本記事では、C++ STLに含まれるstd::mbsrtowcs()関数の仕組み、構文、および具体的な使用例について詳しく解説します。 std::mbsrtowcs()とは? std::mbsrtowcs()は、C++ STLに組み込まれている関数で、<cwchar>ヘッダーファイル内で定義されています。関数名のmbsrtowcs()は「multibyte string to wide character string(マルチバイト文字列からワイド文字列への変換)」を意味し、再開可能な変換状態を維持しながら、NULL終端されたマルチバイト文字列をワイド文字列表現へと変換します。この

  2. C/C++のsystem()関数とは?使い方と実行例を徹底解説

    この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int