The Math.log2() function returns the base 2 logarithm of a number, that is

x > 0 , Math.log2 ( x ) = log 2 ( x ) = the unique y such that 2 y = x \forall x > 0, \mathtt{\operatorname{Math.log2}(x)} = \log_2(x) = \text{the unique} \; y \; \text{such that} \; 2^y = x




A number.

Return value

The base 2 logarithm of the given number. If the number is negative, NaN is returned.


If the value of x is less than 0, the return value is always NaN.

Because log2() is a static method of Math, you always use it as Math.log2(), rather than as a method of a Math object you created (Math is not a constructor).

This function is the equivalent of Math.log(x) / Math.log(2). For log2(e) use the constant Math.LOG2E which is 1 / Math.LN2.


This Polyfill emulates the Math.log2 function. Note that it returns imprecise values on some inputs (like 1 << 29), wrap into Math.round() if working with bit masks.

if (!Math.log2) Math.log2 = function(x) {
  return Math.log(x) * Math.LOG2E;


Using Math.log2()

Math.log2(3);    // 1.584962500721156
Math.log2(2);    // 1
Math.log2(1);    // 0
Math.log2(0);    // -Infinity
Math.log2(-2);   // NaN
Math.log2(1024); // 10


Browser compatibility

BCD tables only load in the browser

See also