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

发布于:2022-12-06 ⋅ 阅读:(948) ⋅ 点赞:(0)

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

函数 
<cmath> <ctgmath>
scalbn
C99
double scalbn(double x, int n);
float scalbnf(float x, int n);
long double scalbnl(long double x, int n);
C++11
double scalbn(double x, int n);
float scalbn(float x, int n);
long double scalbn(long double x, int n);     
double scalbn(T x, int n); // additional overloads for integral types

使用以浮点数为基数的指数缩放有效值 
x乘以FLT_RADIX的n次幂,返回相同的结果: 
scalbn(x,n) = x * FLT_RADIX^n
假设xn是系统中浮点数的组成部分;在这种情况下,这个函数可以优化到比显式计算值的理论操作更有效。
在大多数平台上,FLT_RADIX为2,使此函数等价于ldexp
C99
头文件<tgmath.h>提供了该函数的泛型类型的宏版本。
C++11
在此头文件(<cmath>)中为整型(integral types)提供了额外的重载:这些重载在计算之前有效地将x转换为double类型(定义T为任何整型(integral types))。
这个函数还有另一个版本:scalbln,它与此相同,只是它的第二个实参是一个long int类型。

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

返回值
返回x * FLT_RADIX^n。
如果结果的绝对大小太大,无法用返回类型的值表示,则函数返回带有适当符号的HUGE_VAL(或HUGE_VALFHUGE_VALL),并可能发生上溢范围错误(如果太小,则函数返回0,并可能发生下溢范围错误)。
如果出现范围错误: 
math_errhandling具有MATH_ERRNO集合:全局变量errno设置为ERANGE
math_errhandling具有MATH_ERREXCEPT集合:引发FE_OVERFLOWFE_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;
}
输出:

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到