C++ Reference: Standard C++ Library reference: C Library: cmath: Idexp

发布于:2022-12-05 ⋅ 阅读:(199) ⋅ 点赞:(0)

C++官网参考链接:https://cplusplus.com/reference/cmath/ldexp/

函数 
<cmath> <ctgmath>
ldexp
C90
double ldexp (double x, int exp);
C99
double ldexp  (double x, int exp);      
float ldexpf (float x, int exp);
long double ldexpl (long double x, int exp);
C++98
double ldexp (double x, int exp);      
float ldexp (float x, int exp);
long double ldexp (long double x, int exp);
C++11
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(有效值)乘以2的exp(指数)次幂的结果。
ldexp(x, exp) = x * 2^exp
C99
头文件<tgmath.h>提供了该函数的泛型类型的宏版本。
C++11
在此头文件(<cmath>)中为整型(integral types)提供了额外的重载:这些重载在计算之前有效地将x转换为double类型(定义为T为任何整数类型(integral types))。

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

返回值
函数返回:
x * 2^exp
如果结果的绝对大小太大,不能用返回类型的值表示,函数返回HUGE_VAL(或HUGE_VALFHUGE_VALL)和适当的符号,并发生上溢范围错误: 
C90(C++98)
如果发生上溢范围错误,则将全局变量errno设置为ERANGE
C99(C++11)
如果发生上溢范围错误: 
math_errhandling具有MATH_ERRNO集合:全局变量errno设置为ERANGE
math_errhandling具有MATH_ERREXCEPT集合:引发FE_OVERFLOW
 
用例
/* 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;
}
输出: