Module: Hyperll::Util

Included in:
HyperLogLogPlus, RegisterSet
Defined in:
lib/hyperll/util.rb

Constant Summary collapse

INT_MASK =
0xFFFFFFFF
INTEGER_SIZE =
32
POWERS_OF_TWO =
0.upto(32).map { |i| 2**i }.freeze

Instance Method Summary collapse

Instance Method Details

#number_of_leading_zeros(x) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/hyperll/util.rb', line 8

def number_of_leading_zeros(x)
  return 32 if x == 0

  n = 0
  if x <= 0x0000FFFF
    n += 16
    x *= POWERS_OF_TWO[16]
  end

  if x <= 0x00FFFFFF
    n += 8;
    x *= POWERS_OF_TWO[8]
  end

  if x <= 0x0FFFFFFF
    n += 4
    x *= POWERS_OF_TWO[4]
  end

  if x <= 0x3FFFFFFF
    n += 2
    x *= POWERS_OF_TWO[2]
  end

  if x <= 0x7FFFFFFF
    n += 1
  end

  n
end