mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16:44 +01:00
fix cross-base2k vec_znx_normalize wrong early carry
This commit is contained in:
@@ -32,7 +32,7 @@ impl<D: DataRef> VecZnx<D> {
|
||||
|
||||
data.iter().for_each(|x| {
|
||||
avg.add_assign_round(x, Round::Nearest);
|
||||
max.max_mut(&Float::with_val(53, x.abs_ref()));
|
||||
max.max_mut(&Float::with_val(prec, x.abs_ref()));
|
||||
});
|
||||
avg.div_assign_round(Float::with_val(prec, data.len()), Round::Nearest);
|
||||
data.iter_mut().for_each(|x| {
|
||||
|
||||
@@ -95,9 +95,9 @@ pub fn vec_znx_normalize<R, A, ZNXARI>(
|
||||
// Get carry for limbs of a that have higher precision than res
|
||||
for j in (a_min_size..a_size).rev() {
|
||||
if j == a_size - 1 {
|
||||
ZNXARI::znx_normalize_first_step_carry_only(res_base2k, 0, a.at(a_col, j), carry);
|
||||
ZNXARI::znx_normalize_first_step_carry_only(a_base2k, 0, a.at(a_col, j), carry);
|
||||
} else {
|
||||
ZNXARI::znx_normalize_middle_step_carry_only(res_base2k, 0, a.at(a_col, j), carry);
|
||||
ZNXARI::znx_normalize_middle_step_carry_only(a_base2k, 0, a.at(a_col, j), carry);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,6 +118,10 @@ pub fn vec_znx_normalize<R, A, ZNXARI>(
|
||||
// for the current limb.
|
||||
let mut res_left: usize = res_base2k;
|
||||
|
||||
for j in 0..res_size {
|
||||
ZNXARI::znx_zero(res.at_mut(res_col, j));
|
||||
}
|
||||
|
||||
for j in (0..a_min_size).rev() {
|
||||
// Trackers: wow much of a_norm is left to
|
||||
// be flushed on res.
|
||||
@@ -196,10 +200,6 @@ pub fn vec_znx_normalize<R, A, ZNXARI>(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for j in res_min_size..res_size {
|
||||
ZNXARI::znx_zero(res.at_mut(res_col, j));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -380,14 +380,6 @@ fn test_vec_znx_normalize_conv() {
|
||||
err.sub_assign_round(&data_res[i], Round::Nearest);
|
||||
err = err.abs();
|
||||
|
||||
// println!(
|
||||
// "want: {} have: {} tmp: {} (want-have): {}",
|
||||
// data_want[i].to_f64(),
|
||||
// data_res[i].to_f64(),
|
||||
// data_tmp[i].to_f64(),
|
||||
// err.to_f64()
|
||||
// );
|
||||
|
||||
let err_log2: f64 = err
|
||||
.clone()
|
||||
.max(&Float::with_val(prec as u32, 1e-60))
|
||||
|
||||
Reference in New Issue
Block a user