log2, log2f, log2l
Header: <math.h>
1-3) Computes the base 2 logarithm of arg.
# Declarations
float log2f( float arg );
(since C99)
double log2( double arg );
(since C99)
long double log2l( long double arg );
(since C99)
#define log2( arg )
(since C99)
# Parameters
arg: floating point value
# Return value
If no errors occur, the base-2 logarithm of arg (log2(arg) or lb(arg)) is returned.
# Notes
For integer arg, the binary logarithm can be interpreted as the zero-based index of the most significant 1 bit in the input.
# Example
#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");
}