C ++中的ilogb()函數(shù)使用FLT_RADIX作為對數(shù)的底數(shù),返回| x |的對數(shù)的整數(shù)部分。
這在<cmath>頭文件中定義。
數(shù)學(xué)上
x = significand * FLT_RADIXexponent
significand是在[1.0,2.0)范圍內(nèi)的浮點值,x是傳遞給ilogb()的參數(shù),而exponent是ilogb()返回的整數(shù)值。FLT_RADIX的值一般為2。
ilogb()返回的值比frexp()函數(shù)生成的指數(shù)小1 ,因為有效位數(shù)在[ 1.0,2.0]范圍內(nèi),而不是frexp()在[0.5,1.0]范圍內(nèi)。
int ilogb (double x); int ilogb (float x); int ilogb (long double x); int ilogb (T x); // For integral type
ilogb()函數(shù)接受一個參數(shù),它的ilogb是計算得到的。
ilogb()函數(shù)使用FLT_RADIX作為對數(shù)的底數(shù),返回| x |的對數(shù)的整數(shù)部分。
如果參數(shù)為0,則返回FP_LOGB0。
如果參數(shù)為NaN,則返回FP_LOGBNAN。
如果參數(shù)是無限的,則返回INT_MAX。
#include <iostream> #include <cmath> #include <cfloat> using namespace std; int main() { int result; double significand; double x = 16.81; result = ilogb(x); significand = x / pow(FLT_RADIX, result); cout << "ilogb (" << x << ") = " << result << endl; cout << x << " = " << significand << " * " << FLT_RADIX << "^" << result << endl << endl; return 0; }
運行該程序時,輸出為:
ilogb (16.81) = 4 16.81 = 1.05062 * 2^4
#include <iostream> #include <cmath> #include <cfloat> using namespace std; int main() { int result, x = 19; result = ilogb(x); double significand = x/pow(FLT_RADIX,result); cout << "ilogb (" << x << ") = " << result << endl; cout << x << " = " << significand << " * " << FLT_RADIX << "^" << result << endl << endl; return 0; }
運行該程序時,輸出為:
ilogb (19) = 4 19 = 1.1875 * 2^4