函数
<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


另见