主页C++ Builder 资料C++ Builder 参考手册cfloat 浮点数_scalb, _scalbl
C++ Builder 串口控件
C++ Builder 编程技巧
C++ Builder 操作指南
C++ Builder 参考手册
基础知识
cfloat 浮点数
 • 浮点数类型
 • 浮点数异常处理
 • _finite, _finitel
 • _isinf, _isinfl
 • _isnan, _isnanl
 • _fpclass, _fpclassl
 • _chgsign, _chgsignl
 • _copysign, _copysignl
 • _logb, _logbl
 • _scalb, _scalbl
 • _nextafter, _nextafterl
 • _clear87, _clearfp
 • _control87, _controlfp
 • _status87, _statusfp
 • _fpreset
cmath 数学函数
cstdlib 标准库函数
System 字符串
System 日期和时间
System.Math.hpp 数学函数
其他数据类型
VCL 基础类
VCL 应用程序
Pictures 图片
Graphics 绘图
Additional 控件
System 控件
A ~ Z 字母顺序排列的目录
网友留言/技术支持
_scalb, _scalbl - 计算 x 乘以 2 的整数 y 次幂:x*2y

_scalb, _scalbl:计算 x 乘以 2 的整数 y 次幂:x*2y

函数原型:

double _scalb(double x, long y);
long double _scalbl(long double x, long y);

头文件:

#include <cfloat>

命名空间:

std

参数:

x:用二进位科学计数法表示的数据的有效数字,定义域范围为 [-Infinity, +Infinity],并不限于 (-1.0, -0.5] ∪ [0.5, 1.0)
y:指数,2 的 y 次幂 2y

返回值:

返回值:x 乘以 2 的 y 次幂:x * 2y,即 x * exp2(y),值域范围:[-Infinity, +Infinity]
NAN:定义域错误,此时全局变量 errno 的值为 EDOM
计算可能会溢出,此时全局变量 errno 的值为 ERANGE

例:12.34 = 0.77125 × 24
   -8.2 × 10-20 = -0.756316507022092 × 2-63

这一组函数不是标准 C/C++ 函数,对应的标准 C/C++ 函数是 ldexp

例子:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  double Xes[] = { 12.34, -987.65, 5.43e50, -8.2e-20 };

  UnicodeString s;
  for(size_t i=0; i<sizeof(Xes)/sizeof(Xes[0]); i++)
   {
     double x = Xes[i];
     int y;
     double w = std::frexp(x, &y);

     Memo1->Lines->Add(s.sprintf(L"%g = %g * exp2(%d)", x, w, y));
     Memo1->Lines->Add(s.sprintf(L"ldexp(%g, %d) = %g", w, y, std::ldexp(w,y)));
     Memo1->Lines->Add(s.sprintf(L"_scalb(%g, %d) = %g", w, y, std::_scalb(w,y)));
     Memo1->Lines->Add(L"");
   }
}

兼容性:

这一组函数不是标准 C/C++ 函数,对应的标准 C/C++ 函数是 ldexp
clang64 不支持这一组函数,可以使用标准 C/C++ 的函数 ldexp

函数 \ C++ Builder 编译器 bcc32 clang32 clang64
_scalb  
_scalbl  

相关链接:

ldexpfrexpexp2exppow_matherr浮点数异常处理

◤上一页:_logb, _logbl下一页:_nextafter, _nextafterl

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号