[plt-scheme] Integer-length

From: Jens Axel Søgaard (jensaxel at soegaard.net)
Date: Wed Mar 22 15:54:44 EST 2006

Joe Marshall wrote:
 > On 3/22/06, Jens Axel Søgaard <jensaxel at soegaard.net> wrote:
 >
 >>Is there a faster way of doing this?
 >
 > Yes.

 > (define (integer-length n)
 >   (define (iter i next length nextlength)
 >     (if (> next n)
 >         (if (= i 1)
 >             1
 >             (+ length (integer-length (floor->exact (/ n i)))))
 >         (iter next (* next next) nextlength
 >               (+ nextlength nextlength))))
 >   (iter 1 2 1 1))

Nice.

 > As an example, (integer-length (expt 2 50000)) requires only 62
 > multiplications and 6 divisions.
 >
 > If you are only interested in numbers with a few bits, however, a
 > nested conditional will most likely be the fastest.

In my current context I am interested in numbers below 100000,
but I'll remember the technique.

-- 
Jens Axel Søgaard






Posted on the users mailing list.