函数
<cmath> <ctgmath>

ldexp

double ldexp (double x, int exp);
     double ldexp  (double x     , int exp);      float ldexpf (float x      , int exp);long double ldexpl (long double x, int exp);
     double ldexp (double x     , int exp);      float ldexp (float x      , int exp);long double ldexp (long double x, int exp);
     double ldexp (double x     , int exp);      float ldexp (float x      , int exp);long double ldexp (long double x, int exp);     double ldexp (T x          , int exp); // additional overloads for integral types
通过有效数和指数生成值
返回 x (有效数) 乘以 2exp (指数) 次方的结果。

lexpr(x,exp) = x * 2 exp
头文件 <tgmath.h> 提供了此函数的类型通用宏版本。
此头文件 (<cmath>) 为整数类型提供了额外的重载:这些重载在计算前有效地将 x 转换为 double(为任意整数类型T 定义)。

参数

x
表示有效数的浮点值。
exp
指数的值。

返回值

函数返回

x * 2 exp

如果结果的量级太大,无法用返回类型的值表示,函数会返回带正确符号的 HUGE_VAL(或 HUGE_VALFHUGE_VALL),并发生上溢范围错误

如果发生上溢范围错误,全局变量 errno 会被设置为 ERANGE
如果发生上溢范围错误
- 并且 math_errhandling 设置了 MATH_ERRNO:全局变量 errno 被设置为 ERANGE
- 并且 math_errhandling 设置了 MATH_ERREXCEPT:将引发 FE_OVERFLOW

示例

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

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

  param = 0.95;
  n = 4;
  result = ldexp (param , n);
  printf ("%f * 2^%d = %f\n", param, n, result);
  return 0;
}

输出

0.950000 * 2^4 = 15.200000


另见