函数
<cmath> <ctgmath>

scalbln

     double scalbln  (double x     , long int n);      float scalblnf (float x      , long int n);long double scalblnl (long double x, long int n);
     double scalbln (double x     , long int n);      float scalbln (float x      , long int n);long double scalbln (long double x, long int n);     double scalbln (T x          , long int n); // additional overloads for integral types
使用浮点基数指数缩放有效数(长整型)
x 乘以 FLT_RADIXn 次方,返回计算结果

scalbn(x,n) = x * FLT_RADIXn

一般情况下,xn 是系统中浮点数的组成部分;在这种情况下,此函数可能会被优化,比显式计算值的理论运算更高效。

该函数还有另一个版本:scalbn,它完全相同,只是第二个参数接受一个 int

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

参数

表示有效数的值。</dd>
exp
指数的值。

返回值

返回 x * FLT_RADIXn
如果结果的绝对值太大,无法用返回类型的值表示,则该函数返回带有正确符号的 HUGE_VAL(或 HUGE_VALFHUGE_VALL),并可能发生上溢范围错误(如果结果太小,则函数返回零,并可能发生下溢范围错误)。

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

示例

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

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

  param = 1.50;
  n = 4L;
  result = scalbln (param , n);
  printf ("%f * %d^%d = %f\n", param, FLT_RADIX, n, result);
  return 0;
}

输出

1.500000 * 2^4 = 24.000000


另见