Use fold1 in mul_many

This commit is contained in:
wborgeaud 2021-11-19 11:24:43 +01:00
parent 939acfed96
commit 90a6ffd775
2 changed files with 14 additions and 10 deletions

View File

@ -1,5 +1,7 @@
use std::borrow::Borrow;
use itertools::Itertools;
use crate::field::extension_field::Extendable;
use crate::field::field_types::{PrimeField, RichField};
use crate::gates::arithmetic_base::ArithmeticGate;
@ -206,11 +208,11 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
/// Multiply `n` `Target`s.
pub fn mul_many(&mut self, terms: &[Target]) -> Target {
let mut product = self.one();
for &term in terms {
product = self.mul(product, term);
}
product
terms
.iter()
.copied()
.fold1(|acc, t| self.mul(acc, t))
.unwrap_or_else(|| self.one())
}
/// Exponentiate `base` to the power of `2^power_log`.

View File

@ -1,3 +1,5 @@
use itertools::Itertools;
use crate::field::extension_field::target::{ExtensionAlgebraTarget, ExtensionTarget};
use crate::field::extension_field::FieldExtension;
use crate::field::extension_field::{Extendable, OEF};
@ -294,11 +296,11 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
/// Multiply `n` `ExtensionTarget`s.
pub fn mul_many_extension(&mut self, terms: &[ExtensionTarget<D>]) -> ExtensionTarget<D> {
let mut product = self.one_extension();
for &term in terms {
product = self.mul_extension(product, term);
}
product
terms
.iter()
.copied()
.fold1(|acc, t| self.mul_extension(acc, t))
.unwrap_or_else(|| self.one_extension())
}
/// Like `mul_add`, but for `ExtensionTarget`s.