Talk:Binary logarithm

From Wikipedia, the free encyclopedia
Jump to: navigation, search
WikiProject Mathematics (Rated C-class, Low-importance)
WikiProject Mathematics
This article is within the scope of WikiProject Mathematics, a collaborative effort to improve the coverage of Mathematics on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Mathematics rating:
C Class
Low Importance
 Field: Analysis

[Untitled][edit]

Where did the algorithm given here come from? I would love to find an original reference for this. Kleg 22:45, 19 July 2006 (UTC)

Same here. I can sort of guess why it works (squaring the scaled input value corresponds to doubling the result), but I would love to see the actual maths behind it.

Math for the result is located at this url: http://en.literateprograms.org/Logarithm_Function_%28Python%29

2^n not a function! A function has a domain, a range, and a graph!

lg?[edit]

Where does the name lg come from? --Abdull (talk) 20:15, 24 July 2008 (UTC)

I also wonder. In all my books lb x is used.--MathFacts (talk) 20:26, 16 August 2009 (UTC)

Error in identity?[edit]

Isn't there an error in the identity given for integers?

It says:

 \lfloor \log_2(n) \rfloor = \lceil \log_2(n >> 1) \rceil + 1, \mbox{where }n \ge 1.

But surely it should be:

 \lfloor \log_2(n) \rfloor = \lceil \log_2((n >> 1) + 1) \rceil, \mbox{where }n \ge 1.

? —Preceding unsigned comment added by 195.27.20.35 (talk) 12:05, 26 February 2010 (UTC)

python example[edit]

Python example is clearly too complex and too long. 1exec1 (talk) 17:53, 24 April 2010 (UTC)

Then refer to the OLD python code, it is much simpler

#!/usr/bin/python

from __future__ import division

def log2(X):
  epsilon = 1.0/(10**12)
  integer_value=0
  while X < 1:
    integer_value = integer_value - 1
    X = X * 2
  while X >= 2:
    integer_value = integer_value + 1
    X = X / 2
  decfrac = 0.0
  partial = 0.5
  X=X*X
  while partial > epsilon:
    if X >= 2:
      decfrac = decfrac + partial
      X = X / 2
    partial = partial / 2
    X=X*X
  return (integer_value + decfrac)

if __name__ == '__main__':
  value = 4.5
  print "     X  =",value
  print "LOG2(X) =",log2(value)

# Sample output
#
#    $ python log2.py 
#         X  = 4.5
#    LOG2(X) = 2.16992500144
#

C example[edit]

wouldn't it be nicer code to use

while(n>>=1!=0)
  ++pos;

instead of

if (n >= 1<<16) { n >>= 16; pos += 16; }
if (n >= 1<< 8) { n >>=  8; pos +=  8; }
if (n >= 1<< 4) { n >>=  4; pos +=  4; }
if (n >= 1<< 2) { n >>=  2; pos +=  2; }
if (n >= 1<< 1) {           pos +=  1; }

? -- 129.247.247.239 (talk) 11:53, 16 July 2010 (UTC)

Yes, I agree. The point of an article like this is to explain how a binary logarithm works, not to show some super-optimized and confusing C version. On the other hand, no one really writes anything in C anymore, unless it needs to run really fast... Moxfyre (ǝɹʎℲxoɯ | contrib) 15:28, 16 July 2010 (UTC)

the notation lb is used without an introduction[edit]

Under "Information Theory" the notation lb rather than ld is suddenly used without explanation. Is this a typo? If not, perhaps it should say something like: lg, lx, and lb are sometimes used for base 2 logs.