diff --git a/src/field/lagrange.rs b/src/field/lagrange.rs index 06204b60..536da9ca 100644 --- a/src/field/lagrange.rs +++ b/src/field/lagrange.rs @@ -53,15 +53,16 @@ fn interpolate(points: &[(F, F)], x: F, barycentric_weights: &[F]) -> fn barycentric_weights(points: &[(F, F)]) -> Vec { let n = points.len(); - (0..n) - .map(|i| { - (0..n) - .filter(|&j| j != i) - .map(|j| points[i].0 - points[j].0) - .product::() - .inverse() - }) - .collect() + F::batch_multiplicative_inverse( + &(0..n) + .map(|i| { + (0..n) + .filter(|&j| j != i) + .map(|j| points[i].0 - points[j].0) + .product::() + }) + .collect::>(), + ) } #[cfg(test)] @@ -117,16 +118,6 @@ mod tests { } fn eval_naive(coeffs: &PolynomialCoeffs, domain: &[F]) -> Vec<(F, F)> { - domain - .iter() - .map(|&x| { - let eval = x - .powers() - .zip(&coeffs.coeffs) - .map(|(x_power, &coeff)| coeff * x_power) - .sum(); - (x, eval) - }) - .collect() + domain.iter().map(|&x| (x, coeffs.eval(x))).collect() } }