Click here to Skip to main content
16,005,389 members
Home / Discussions / C#
   

C#

 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:43
mvePIEBALDconsult29-Nov-07 13:43 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 14:02
sitebuilderLuc Pattyn29-Nov-07 14:02 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 10:26
mvePIEBALDconsult29-Nov-07 10:26 
GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 10:45
Skippums29-Nov-07 10:45 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:03
mvePIEBALDconsult29-Nov-07 13:03 
GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 13:21
Skippums29-Nov-07 13:21 
GeneralRe: Base 2 Log Method [modified] Pin
PIEBALDconsult29-Nov-07 14:15
mvePIEBALDconsult29-Nov-07 14:15 
GeneralRe: Base 2 Log Method Pin
Skippums30-Nov-07 5:19
Skippums30-Nov-07 5:19 
Nice idea! We have a new winner...

private static readonly byte[] s_Log2Vals = new byte[]
    { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4 };

private byte Log2(ulong val) {
    int res = -1;
    if (val  > 0xFFFFFFFF) { res += 32; val >>= 32; }
    uint val2 = (uint)val;
    if (val2 > 0x0000FFFF) { res += 16; val2 >>= 16; }
    if (val2 > 0x000000FF) { res +=  8; val2 >>=  8; }
    if (val2 > 0x0000000F) { res +=  4; val2 >>=  4; }
    return (byte)(res + s_Array[val2]);
}
The stats are as follows:
                           Gross    Net
Cascading Types:          1046 ms  591 ms
Hard Coded Conditionals:   760 ms  305 ms
Hard Coded Cond. W/ Array: 593 ms  138 ms
Control:                   455 ms    0 ms

As you can see, this method (using your idea), only took ~90ms, which increased throughput by a factor of 2.21! Thanks,

Jeff
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult30-Nov-07 10:25
mvePIEBALDconsult30-Nov-07 10:25 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult3-Dec-07 11:07
mvePIEBALDconsult3-Dec-07 11:07 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 13:39
sitebuilderLuc Pattyn29-Nov-07 13:39 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:48
mvePIEBALDconsult29-Nov-07 13:48 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 14:13
sitebuilderLuc Pattyn29-Nov-07 14:13 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 10:55
sitebuilderLuc Pattyn29-Nov-07 10:55 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 12:38
mvePIEBALDconsult29-Nov-07 12:38 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 13:57
sitebuilderLuc Pattyn29-Nov-07 13:57 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:59
mvePIEBALDconsult29-Nov-07 13:59 
AnswerRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 6:02
mvePIEBALDconsult29-Nov-07 6:02 
GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 6:22
Skippums29-Nov-07 6:22 
AnswerRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 6:15
sitebuilderLuc Pattyn29-Nov-07 6:15 
GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 6:30
Skippums29-Nov-07 6:30 
GeneralRe: Base 2 Log Method Pin
Ennis Ray Lynch, Jr.29-Nov-07 6:36
Ennis Ray Lynch, Jr.29-Nov-07 6:36 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 8:58
mvePIEBALDconsult29-Nov-07 8:58 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 9:22
sitebuilderLuc Pattyn29-Nov-07 9:22 
GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 9:41
Skippums29-Nov-07 9:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.