函式
<cmath> <ctgmath>

frexp

double frexp (double x, int* exp);
     double frexp  (double x     , int* exp);      float frexpf (float x      , int* exp);long double frexpl (long double x, int* exp);
     double frexp (double x     , int* exp);      float frexp (float x      , int* exp);long double frexp (long double x, int* exp);
     double frexp (double x     , int* exp);      float frexp (float x      , int* exp);long double frexp (long double x, int* exp);     double frexp (T x          , int* exp); // additional overloads for integral types
分解浮點數的尾數和指數
將浮點數 x 分解為其二進位制尾數(絕對值介於 0.5(包含)和 1.0(不包含)之間的浮點數)和以 2 為底的整數指數,使得

x = significand * 2 exponent
exponent 儲存在 exp 指向的位置,而 significand 是函式返回的值。

如果 x 為零,則尾數和指數部分均為零。
如果 x 為負數,則此函式返回的尾數也是負數。

標頭檔案 <tgmath.h> 提供了此函式的型別通用宏版本。
此標頭檔案(<cmath>)為 整數型別提供了附加過載:這些過載在計算前會有效地將 x 轉換為 double(對 T 為任何整數型別 定義)。

引數

x
要分解的值。
exp
指向一個 int 的指標,用於儲存指數的值。

返回值

x 的二進位制尾數。
此值為其絕對值落在區間 [0.5,1) 內的浮點值,該值乘以 2exp 次冪後等於 x

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* frexp example */
#include <stdio.h>      /* printf */
#include <math.h>       /* frexp */

int main ()
{
  double param, result;
  int n;

  param = 8.0;
  result = frexp (param , &n);
  printf ("%f = %f * 2^%d\n", param, result, n);
  return 0;
}

輸出

8.000000 = 0.500000 * 2^4


另見