Create a polynomial from given `roots` as `(x-roots[0])*(x-roots[1])*(x-roots[2])*..`
(roots: &[F])
| 57 | |
| 58 | /// Create a polynomial from given `roots` as `(x-roots[0])*(x-roots[1])*(x-roots[2])*..` |
| 59 | pub fn poly_from_roots<F: Field>(roots: &[F]) -> DensePolynomial<F> { |
| 60 | if roots.is_empty() { |
| 61 | return DensePolynomial::zero(); |
| 62 | } |
| 63 | |
| 64 | // [(x-roots[0]), (x-roots[1]), (x-roots[2]), ..., (x-roots[last])] |
| 65 | let terms = cfg_into_iter!(roots) |
| 66 | .map(|i| DensePolynomial::from_coefficients_slice(&[-*i, F::one()])) |
| 67 | .collect::<Vec<_>>(); |
| 68 | |
| 69 | // Product (x-roots[0]) * (x-roots[1]) * (x-roots[2]) * ... * (x-roots[last]) |
| 70 | multiply_many_polys(terms) |
| 71 | } |