Цикл подсчитывает количество последовательных сдвигов вправо (то есть деления на 2), которые могут быть выполнены на $t0
без результата, равного нулю.
Это также может быть выражено как нахождение (ноль-на основе) положение самого левого 1
-бит в $t0
. И поскольку нас заботит только крайний левый 1
, мы можем, в свою очередь, выразить это как нахождение наибольшего целого числа z , такого, что 2 z <= <strong>$ t0 .
Мы можем воспользоваться преимуществом взаимосвязи между логарифмами и возведением в степень, а именно:
log b (m) = n если b n = m
Итак $ t0 = 2 n где n = log 2 ($ t0) , что также означает, что $ t0 = 2 log 2 ($ t0)
Таким образом, нам интересно найти наибольшее целое число z , такое, что 2 z <= 2 <sup>log 2 ($ t0)
Поскольку 2 x является монотонно возрастающей функцией, из этого следует, что 2 x <= 2 <sup>y для x <= y </strong>. Таким образом, мы можем упростить то, что мы ищем, до наибольшего целого числа z , такого что z <= log <sub>2 ($ t0) , которое является определением пол (журнал 2 ($ t0)) .