This subroutine finds a smallest integer that is a power of 2 and that is greater than or equal to its first argument. The power itself is then returned in the second argument and the integer is returned as the value of the function.
The subroutine goes about its business by dividing the first argument
by 2 until nothing is left. The highest loop index, i, attained while
executing the loop, is then used
as an exponens. There is a small subtlety here: if the first argument
is a power of 2 then the exponens is actually i-1, and the
number returned is the same as the first argument. Otherwise the
exponens is i and the value returned by
Observe the use of
effect is similar to aborting a loop with a
in C-language programs.
The function also checks for an overflow on 2i, but doesn't do anything exciting about it other than writing a message on standard output, which is a rather bad idea, because a program that calls it may end up evaluating some nonsense. In this program this doesn't matter, because you're unlikely to work with a machine that has more than 231 processors any time soon.