Hi,
On Tue, 17 Feb 2009, John Tapsell wrote:
2009/2/17 Johannes Schindelin [off-list ref]:
quoted
On Tue, 17 Feb 2009, Christian Couder wrote:
quoted
+static int estimate_bisect_steps(int all)
+{
+ int log2 = 0;
+ int left = (all >> 1) - 1;
+
+ if (left <= 0)
+ return 0;
+
+ do {
+ left = left >> 1;
+ log2++;
+ } while (left);
+
+ return log2;
+}
How about this instead, calling it from cmd_rev_list directly?
static int log2(int n)
{
int log2;
for (log2 = 0; n > 1; log2++)
n >>= 1;
return log2;
}
This would work, if you want a non-iterative solution
unsigned int log2_integer_approximate(unsigned int n){
*((float*)&n) = (float)n;
return ((n & (~((1<<23) - 1))) >> 23) - 127;
}
That assumes that your floats are IEEE floats, right?
Ciao,
Dscho