函式
<cmath> <ctgmath>

ilogb

int ilogb  (double x);int ilogbf (float x);int ilogbl (long double x);
int ilogb (double x);int ilogb (float x);int ilogb (long double x);int ilogb (T x);           // additional overloads for integral types
整數二進位制對數
返回|x|的對數的整數部分,使用FLT_RADIX作為對數的底。

這是機器內部用來表示浮點值x指數,當它使用一個在1.0FLT_RADIX之間的有效數時,因此,對於一個正數x

x = 有效數 * FLT_RADIX 指數

通常,FLT_RADIX2,並且此函式返回的值比用frexp獲得的指數小一(因為有效數的歸一化範圍是[1.0,2.0)而不是[0.5,1.0))。

標頭檔案 <tgmath.h> 提供了此函式的型別通用宏版本。
此標頭檔案 (<cmath>) 中為整型提供了額外的過載:這些過載在計算前有效地將x轉換為double(定義為T是任何整型)。

此函式可能會返回兩個特定的宏常量來指示以下特殊情況
描述
FP_ILOGB0x為零
FP_ILOGBNANxNaN

這些宏常量定義在同一個標頭檔案 ( <cmath> ) 中。

引數

x
要返回其ilogb的值。

返回值

如果x是正常的,則為x的以FLT_RADIX為底的對數。
如果x是次正常的,返回的值對應於其歸一化表示(負指數)。
如果x為零,則返回FP_LOGB0(一個特殊值,僅由此函式返回,在<cmath>中定義)。
如果x是無窮大,則返回INT_MAX
如果x是NaN,則返回FP_ILOGBNAN(一個特殊值,僅由此函式返回,在<cmath>中定義)。
如果結果的量級太大,無法用返回型別的值表示,則函式返回一個未指定的值,併發生上溢範圍錯誤
x的零值、無窮值或NaN值也可能導致定義域錯誤或上溢範圍錯誤

如果發生定義域錯誤
- 並且 math_errhandling 設定了 MATH_ERRNO:全域性變數 errno 會被設定為 EDOM
- 並且 math_errhandling 設定了 MATH_ERREXCEPT:將引發 FE_INVALID

如果發生上溢範圍錯誤
- 並且 math_errhandling 設定了 MATH_ERRNO:全域性變數 errno 被設定為 ERANGE
- 並且 math_errhandling 設定了 MATH_ERREXCEPT:將引發 FE_OVERFLOW

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* ilogb example */
#include <stdio.h>      /* printf */
#include <math.h>       /* ilogb */

int main ()
{
  double param;
  int result;

  param = 10.0;
  result = ilogb (param);
  printf ("ilogb(%f) = %d\n", param, result);
  return 0;
}

輸出

ilogb(10.000000) = 3


另見