frexpfrexpffrexpl

浮動小数点数の仮数と指数を取得します。

構文

double frexp(
   double x,
   int *expptr
);
float frexpf(
   float x,
   int * expptr
);
long double frexpl(
   long double x,
   int * expptr
);
#define frexpl(X, INT_PTR) // Requires C11 or higher
float frexp(
   float x,
   int * expptr
);  // C++ only
long double frexp(
   long double x,
   int * expptr
);  // C++ only

パラメーター

x
浮動小数点値。

expptr
格納された整数の指数へのポインター。

戻り値

frexp は仮数部を返します。 x が 0 の場合、この関数は、仮数と指数部の両方に対して 0 を返します。 expptrNULL場合は、「パラメーターの検証で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、この関数は errnoEINVAL に設定し、0 を返します。

解説

frexp関数は、浮動小数点値 (x) を仮数 (m) と指数 (n) に分割し、mの絶対値が 0.5 以上 1.0 未満になるようにし、x = m * 2n。 整数の指数 n は、expptr によって指定された場所に格納されます。

C++ ではオーバーロードが可能であるため、frexp のオーバーロードを呼び出すことができます。 C プログラムでは、 <tgmath.h> マクロを使用してこの関数を呼び出す場合を除き、 frexp は常に doubleint ポインターを受け取り、 doubleを返します。

<tgmath.h>frexp() マクロを使用する場合は、引数の型によって、この関数のどのバージョンが選択されるかが決定されます。 詳細については、「ジェネリック型数値演算」を参照してください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

要件

機能 必須ヘッダー
frexpfrexpffrexpl <math.h>
frexp マクロ <tgmath.h>

互換性の詳細については、「 Compatibility」を参照してください。

// crt_frexp.c
// This program calculates frexp( 16.4, &n )
// then displays y and n.

#include <math.h>
#include <stdio.h>

int main( void )
{
   double x, y;
   int n;

   x = 16.4;
   y = frexp( x, &n );
   printf( "frexp( %f, &n ) = %f, n = %d\n", x, y, n );
}
frexp( 16.400000, &n ) = 0.512500, n = 5

関連項目

数値演算と浮動小数点のサポート
ldexp
modfmodffmodfl