improve bit_len

pull/13872/head
Subhomoy Haldar 2022-03-30 14:47:45 +05:30
parent 33d796f071
commit bdd2929266
1 changed files with 3 additions and 8 deletions

View File

@ -817,7 +817,7 @@ pub fn (a Integer) isqrt() Integer {
return a return a
} }
mut shift := a.digits.len * 32 - bits.leading_zeros_32(a.digits.last()) mut shift := a.bit_len()
if shift & 1 == 1 { if shift & 1 == 1 {
shift += 1 shift += 1
} }
@ -901,16 +901,11 @@ pub fn (x Integer) gcd_binary(y Integer) Integer {
return b.lshift(shift) return b.lshift(shift)
} }
[direct_array_access] [inline; direct_array_access]
pub fn (x Integer) bit_len() int { pub fn (x Integer) bit_len() int {
if x.signum == 0 { if x.signum == 0 {
return 0 return 0
} }
mut length := 0 return x.digits.len * 32 - bits.leading_zeros_32(x.digits.last())
for _ in 1 .. x.digits.len {
length += 32
}
return length + (32 - bits.leading_zeros_32(x.digits.last()))
} }