函式
<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


另見