-

   rss_thedaily_wtf

 - e-mail

 

 -

 LiveInternet.ru:
: 06.04.2008
:
:
: 0

:


CodeSOD: It's Log, Log, Log

, 26 2016 . 13:30 +

Logarithm keys

Reader Bernie submits for our approval this wonderful C# log base 2 implementation. He says: We can distinguish two halves in that code. It looks like it was originally written for an unsigned 16-bit int, and later on extended for signed 32-bit integers.

This code reminds me of the change-sorting machine I have in my closet, which sorts change based on weight. That thing has no error handling if you try to sort, say, a huge boulder through it; it'd just fall apart. At least here, we have the assurance that the universe's biggest numbers all have a log base 2 of 31.

public static int Log2(int x)
 {
 if (x <= 65536)
 {
 if (x <= 256)
 {
 if (x <= 16)
 {
 if (x <= 4)
 {
 if (x <= 2)
 {
 if (x <= 1)
 return 0;
 return 1;
 }

 return 2;
 }

 if (x <= 8)
 return 3;
 return 4;
 }

 if (x <= 64)
 {
 if (x <= 32)
 return 5;
 return 6;
 }

 if (x <= 128)
 return 7;
 return 8;
 }

 if (x <= 4096)
 {
 if (x <= 1024)
 {
 if (x <= 512)
 return 9;
 return 10;
 }

 if (x <= 2048)
 return 11;
 return 12;
 }

 if (x <= 16384)
 {
 if (x <= 8192)
 return 13;
 return 14;
 }

 if (x <= 32768)
 return 15;
 return 16;
 }

 if (x <= 16777216)
 {
 if (x <= 1048576)
 {
 if (x <= 262144)
 {
 if (x <= 131072)
 return 17;
 return 18;
 }

 if (x <= 524288)
 return 19;
 return 20;
 }

 if (x <= 4194304)
 {
 if (x <= 2097152)
 return 21;
 return 22;
 }

 if (x <= 8388608)
 return 23;
 return 24;
 }

 if (x <= 268435456)
 {
 if (x <= 67108864)
 {
 if (x <= 33554432)
 return 25;
 return 26;
 }

 if (x <= 134217728)
 return 27;
 return 28;
 }

 if (x <= 1073741824)
 {
 if (x <= 536870912)
 return 29;
 return 30;
 }

 return 31;
 }

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!

http://thedailywtf.com/articles/it-s-log-log-log

:  

: [1] []
 

:
: 

: ( )

:

  URL