C ++中的ilogb()函数使用FLT_RADIX作为对数的底数,返回| x |的对数的整数部分。
这在<cmath>头文件中定义。
数学上
x = significand * FLT_RADIXexponent
significand是在[1.0,2.0)范围内的浮点值,x是传递给ilogb()的参数,而exponent是ilogb()返回的整数值。FLT_RADIX的值一般为2。
ilogb()返回的值比frexp()函数生成的指数小1 ,因为有效位数在[ 1.0,2.0]范围内,而不是frexp()在[0.5,1.0]范围内。
int ilogb (double x); int ilogb (float x); int ilogb (long double x); int ilogb (T x); // For integral type
ilogb()函数接受一个参数,它的ilogb是计算得到的。
ilogb()函数使用FLT_RADIX作为对数的底数,返回| x |的对数的整数部分。
如果参数为0,则返回FP_LOGB0。
如果参数为NaN,则返回FP_LOGBNAN。
如果参数是无限的,则返回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