Home C&C++函数库 c++ 语法 程序源码 Linux C库

scalbn

函数  <cmath> <ctgmath>

C99 double scalbn (double x , int exp);
float scalbnf (float x , int exp);
long double scalbnl (long double x , int exp);
C++11 double scalbn (double x , int exp);
float scalbn (float x , int exp);
long double scalbn (long double x , int exp);
double scalbn (T x , int exp);     // additional overloads for integral types

计算底数指数形式浮点数
比例缩放底数指数形式浮点数
将x乘以FLT_RADIX为底数的exp次方,返回计算结果:
scalbn(x,exp) = x * FLT_RADIXexp

假设x和exp是系统中浮点数的组成部分;在这种情况下,可以优化该函数,使其比显式计算值的理论操作更有效。 在大多数平台上,FLT_RADIX基数是2,使这个函数等价于ldexp
C99 头文件<tgmath.h> 提供了该函数的泛型类型宏版本。
C++11 这个头文件(<cmath>)为整型提供了额外的重载:这些重载在计算之前将x转换为double (在T是任何整型时定义)。

这个函数还有另一个版本:scalbln,它们是完全相同的,只是它接受一个long int作为第二个实参。

☲  参数


x
表示有效位数的值
exp
指数

☉  返回值



返回x * FLT_RADIXexp
如果返回类型的值太大,函数返回HUGE_VAL (或HUGE_VALFHUGE_VALL)和相应的符号, 并且一个溢出范围错误可能发生(如果过小,则函数返回0,和下溢范围错误可能发生)。

如果出现溢出范围错误:
-并且math_errhandling设置了MATH_ERRNO: 全局变量errno设置为 ERANGE。
-并且math_errhandling设置了MATH_ERREXCEPT: 触发 FE_OVERFLOW 或者 FE_UNDERFLOW

☣  示例



/* scalbn example */
#include <stdio.h>      /* printf */
#include <float.h>      /* FLT_RADIX */
#include <math.h>       /* scalbn */

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

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

输出:
1.500000 * 2^4 = 24.000000

🍄  另请参阅



ldexp 从有效位数和指数生成值(function )
logb 浮点对数(function )

联系我们 免责声明 关于CandCplus 网站地图