Update partial.rs

This commit is contained in:
goldenMetteyya 2019-04-09 23:49:51 +03:00
parent 10fcc8b683
commit 1962227e32

View File

@ -31,35 +31,37 @@ fn signed_shift(op: u64, shift: i32) -> u64 {
//https://github.com/thomaso-mirodin/intmath/blob/master/u64/log2.go#L5 //https://github.com/thomaso-mirodin/intmath/blob/master/u64/log2.go#L5
// Log2 returns log base 2 of n. It's the same as index of the highest // Log2 returns log base 2 of n. It's the same as index of the highest
// bit set in n. n == 0 returns 0 // bit set in n. n == 0 returns 0
// fn Log2(n: u64) -> u64 { fn u64_log2(n: u64) -> u64 {
// // Using uint instead of uint64 is about 25% faster // Using uint instead of uint64 is about 25% faster
// // on x86 systems with the default Go compiler. // on x86 systems with the default Go compiler.
// var r, v uint let mut r: usize = 0;
// if n < 1<<32 { let mut _v: usize = 0;
// v = uint(n)
// } else { if n < 1<<32 {
// r = 32 _v = n as usize;
// v = uint(n >> 32) } else {
// } r = 32;
// if v >= 1<<16 { _v = (n >> 32) as usize;
// r += 16 }
// v >>= 16 if _v >= 1<<16 {
// } r += 16;
// if v >= 1<<8 { _v >>= 16;
// r += 8 }
// v >>= 8 if _v >= 1<<8 {
// } r += 8;
// if v >= 1<<4 { _v >>= 8;
// r += 4 }
// v >>= 4 if _v >= 1<<4 {
// } r += 4;
// if v >= 1<<2 { _v >>= 4;
// r += 2 }
// v >>= 2 if _v >= 1<<2 {
// } r += 2;
// r += v >> 1 _v >>= 2;
// return uint64(r) }
// } r += _v >> 1;
return r as u64;
}
//Port to rust from c++ //Port to rust from c++
@ -82,8 +84,8 @@ pub fn partial_bigint(op: &BigInt) -> (i64, i32) {
//let lg2: f64 = (last as f64).log2() + 1.0; //let lg2: f64 = (last as f64).log2() + 1.0;
// // extract the top word of bits from a and b // // extract the top word of bits from a and b
// let h = a.digits()[n - 1].leading_zeros(); // let h = a.digits()[n - 1].leading_zeros();
let lg2 = last.leading_zeros(); //let lg2 = last.leading_zeros();
let lg2 = u64_log2(last);
let mut exp = lg2 as i32; let mut exp = lg2 as i32;