名稱空間
變體
操作

log2, log2f, log2l

來自 cppreference.com
< c‎ | 數值‎ | 數學
 
 
 
常用數學函式
函式
基本操作
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大值/最小值操作
(C99)
(C99)
指數函式
(C23)
(C99)
(C99)
(C23)
(C23)

log2
(C99)
(C99)(C23)
(C23)
(C23)
冪函式
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
三角函式和雙曲函式
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
最近整數浮點數
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮點數操作
(C99)(C99)
(C99)(C23)
(C99)
窄化操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子與量子指數
十進位制重新編碼函式
總序和載荷函式
分類
(C99)
(C99)
(C99)
(C23)
誤差函式和伽馬函式
(C99)
(C99)
(C99)
(C99)
型別
宏常量
特殊浮點值
(C99)(C23)
引數和返回值
錯誤處理
快速操作指示符
 
定義於標頭檔案 <math.h>
float       log2f( float arg );
(1) (C99 起)
double      log2( double arg );
(2) (C99 起)
long double log2l( long double arg );
(3) (C99 起)
定義於標頭檔案 <tgmath.h>
#define log2( arg )
(4) (C99 起)
1-3) 計算 arg 的底數為 2 的對數。
4) 型別泛型宏:若 arg 型別為 long double,則呼叫 log2l。否則,若 arg 為整型或 double 型別,則呼叫 log2。否則,呼叫 log2f

目錄

[編輯] 引數

arg - 浮點值

[編輯] 返回值

若無錯誤發生,則返回 arg 的底數為 2 的對數(log2(arg)lb(arg))。

如果發生域錯誤,則返回實現定義的值 (支援 NaN 時返回 NaN)。

若發生極點錯誤,則返回 -HUGE_VAL-HUGE_VALF-HUGE_VALL

[編輯] 錯誤處理

錯誤按 math_errhandling 中指定的方式報告。

arg 小於零,則發生定義域錯誤。

arg 為零,則可能發生極點錯誤。

如果實現支援 IEEE 浮點運算 (IEC 60559),

  • 若引數為 ±0,則返回 -∞ 並引發 FE_DIVBYZERO
  • 若引數為 1,則返回 +0。
  • 若引數為負數,則返回 NaN 並引發 FE_INVALID
  • 如果引數為 +∞,則返回 +∞
  • 如果引數為 NaN,則返回 NaN

[編輯] 注意

對於整型 arg,二進位制對數可以解釋為輸入中最高有效位的 1 的零基索引。

[編輯] 示例

#include <stdio.h>
#include <math.h>
#include <float.h>
#include <errno.h>
#include <fenv.h>
// #pragma STDC FENV_ACCESS ON
int main(void)
{
    printf("log2(65536) = %f\n", log2(65536));
    printf("log2(0.125) = %f\n", log2(0.125));
    printf("log2(0x020f) = %f (highest set bit is in position 9)\n", log2(0x020f));
    printf("base-5 logarithm of 125 = %f\n", log2(125)/log2(5));
    // special values
    printf("log2(1) = %f\n", log2(1));
    printf("log2(+Inf) = %f\n", log2(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("log2(0) = %f\n", log2(0));
    if(errno == ERANGE) perror("    errno == ERANGE");
    if(fetestexcept(FE_DIVBYZERO)) puts("    FE_DIVBYZERO raised");
}

可能的輸出

log2(65536) = 16.000000
log2(0.125) = -3.000000
log2(0x020f) = 9.041659 (highest set bit is in position 9)
base-5 logarithm of 125 = 3.000000
log2(1) = 0.000000
log2(+Inf) = inf
log2(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised

[編輯] 參考

  • C17 標準 (ISO/IEC 9899:2018)
  • 7.12.6.10 log2 函式 (p: 179)
  • 7.25 型別通用數學 <tgmath.h> (p: 272-273)
  • F.10.3.10 log2 函式 (p: 381)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.12.6.10 log2 函式 (p: 246)
  • 7.25 型別通用數學 <tgmath.h> (p: 373-375)
  • F.10.3.10 log2 函式 (p: 522)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.12.6.10 log2 函式 (p: 226)
  • 7.22 型別通用數學 <tgmath.h> (p: 335-337)
  • F.9.3.10 log2 函式 (p: 459)

[編輯] 亦參見

(C99)(C99)
計算自然(底數e)對數 (ln(x))
(函式) [編輯]
計算常用(底數10)對數 (log10(x))
(函式) [編輯]
(C99)(C99)(C99)
計算1加上給定數的自然(底數e)對數 (ln(1+x))
(函式) [編輯]
(C99)(C99)(C99)
計算 2 的給定冪 (2x)
(函式) [編輯]
C++ 文件 用於 log2