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

# 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");
}

# See also