mirror of
https://gitlab.com/artofrev/smallint.git
synced 2024-12-04 17:11:38 -05:00
karatsuba fixed
This commit is contained in:
parent
4d6017b974
commit
543b4ef459
26
src/ops.rs
26
src/ops.rs
|
@ -344,25 +344,27 @@ fn mul_two_slices(slice1: &[u32], slice2: &[u32]) -> Vec<u32> {
|
||||||
let (low1, high1) = slice1.split_at(m2 as usize);
|
let (low1, high1) = slice1.split_at(m2 as usize);
|
||||||
let (low2, high2) = slice2.split_at(m2 as usize);
|
let (low2, high2) = slice2.split_at(m2 as usize);
|
||||||
|
|
||||||
println!("z0: {:?}, {:?}", low1, low2);
|
|
||||||
println!("z1: {:?}, {:?}", &add_two_slices(low1, high1), &add_two_slices(low2, high2));
|
|
||||||
println!("z2: {:?}, {:?}", high1, high2);
|
|
||||||
|
|
||||||
let z0 = mul_two_slices(low1, low2);
|
let z0 = mul_two_slices(low1, low2);
|
||||||
let z1 = mul_two_slices(&add_two_slices(low1, high1), &add_two_slices(low2, high2));
|
let z1 = mul_two_slices(&add_two_slices(low1, high1), &add_two_slices(low2, high2));
|
||||||
let z2 = mul_two_slices(high1, high2);
|
let z2 = mul_two_slices(high1, high2);
|
||||||
|
|
||||||
let mut op0 = z0.clone();
|
let mut op0 = z2.clone();
|
||||||
|
|
||||||
|
op0.reverse();
|
||||||
|
|
||||||
|
op0.resize(op0.len() + (m2 as usize * 2), 0);
|
||||||
|
|
||||||
|
op0.reverse();
|
||||||
|
|
||||||
|
|
||||||
for _ in 0..(m2 * 2) {
|
|
||||||
op0.insert(0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut op1 = sub_two_slices(&sub_two_slices(&z1, &z2), &z0);
|
let mut op1 = sub_two_slices(&sub_two_slices(&z1, &z2), &z0);
|
||||||
|
|
||||||
for _ in 0..m2 {
|
op1.reverse();
|
||||||
op1.insert(0, 0);
|
|
||||||
}
|
op1.resize(op1.len() + (m2 as usize), 0);
|
||||||
|
|
||||||
|
op1.reverse();
|
||||||
|
|
||||||
add_two_slices(&add_two_slices(&op0, &op1), &z0)
|
add_two_slices(&add_two_slices(&op0, &op1), &z0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user