23template <
typename Fr>
Fr evaluate(
const Fr* coeffs,
const Fr& z,
const size_t n);
27 return evaluate(coeffs.data(), z, n);
31 return evaluate(coeffs, z, coeffs.size());
33template <
typename Fr>
Fr evaluate(
const std::vector<Fr*> coeffs,
const Fr& z,
const size_t large_n);
36 requires SupportsFFT<Fr>
40 requires SupportsFFT<Fr>
60 const size_t size = polynomial.size();
66 std::copy_n(polynomial.begin() + 1, size - 1, polynomial.begin());
93 Fr root_inverse = (-root).invert();
98 for (
size_t i = 0; i < size - 1; ++i) {
101 temp = (polynomial[i] - temp);
102 temp *= root_inverse;
103 polynomial[i] = temp;
#define BB_ASSERT_LTE(left, right,...)
void ifft(Fr *coeffs, Fr *target, const EvaluationDomain< Fr > &domain)
void compute_linear_polynomial_product(const Fr *roots, Fr *dest, const size_t n)
Fr evaluate(const Fr *coeffs, const Fr &z, const size_t n)
void factor_roots(std::span< Fr > polynomial, const Fr &root)
Divides p(X) by (X-r) in-place.
void fft_inner_parallel(Fr *coeffs, Fr *target, const EvaluationDomain< Fr > &domain, const Fr &, const std::vector< Fr * > &root_table)
void compute_efficient_interpolation(const Fr *src, Fr *dest, const Fr *evaluation_points, const size_t n)
Fr compute_sum(const Fr *src, const size_t n)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
BB_INLINE constexpr bool is_zero() const noexcept
static constexpr field zero()