4 static int orig_lg(int n
)
10 for (j
= n
, l
= 0; j
; j
>>= 1) l
++;
16 static int lg
ARGS((int n
));
22 if (n
<= 0) return -1;
26 if (n
& 0xFFFF0000) j
= 16, n
>>= 16;
27 if (n
& 0x0000FF00) j
+= 8, n
>>= 8;
28 if (n
& 0x000000F0) j
+= 4, n
>>= 4;
29 if (n
& 0x0000000C) j
+= 2, n
>>= 2;
30 if (n
& 0x00000002) j
+= 1;
32 if (n
>> 16) j
= 16, n
>>= 16;
33 if (n
>> 8) j
+= 8, n
>>= 8;
34 if (n
>> 4) j
+= 4, n
>>= 4;
35 if (n
>> 2) j
+= 2, n
>>= 2;
43 main(int argc
, char **argv
)
51 for (k
= 0; k
< 300000000; ++k
) {
52 int n
= k
- 10 /*random() % 60*/;
55 sum
+= l
= orig_lg(n
);
62 printf("Opps, bug at lg(%d) = %d, not %d\n", n
, l
, f
);
66 printf("sum = %d\n", sum
);