From 2a37aeca5db2852aa84955e1bb1ccbe94a2ba0fd Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Wed, 14 Sep 2022 05:48:37 +0200 Subject: [PATCH] Move to `util` and rename --- plonky2/src/gates/base_sum.rs | 20 ++------------------ util/src/lib.rs | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/plonky2/src/gates/base_sum.rs b/plonky2/src/gates/base_sum.rs index 37f03414..43ae2fd2 100644 --- a/plonky2/src/gates/base_sum.rs +++ b/plonky2/src/gates/base_sum.rs @@ -3,6 +3,7 @@ use std::ops::Range; use plonky2_field::extension::Extendable; use plonky2_field::packed::PackedField; use plonky2_field::types::{Field, Field64}; +use plonky2_util::log_floor; use crate::gates::gate::Gate; use crate::gates::packed_util::PackedEvaluableBase; @@ -33,7 +34,7 @@ impl BaseSumGate { pub fn new_from_config(config: &CircuitConfig) -> Self { let num_limbs = - logarithm(F::ORDER as usize, B).min(config.num_routed_wires - Self::START_LIMBS); + log_floor(F::ORDER as usize, B).min(config.num_routed_wires - Self::START_LIMBS); Self::new(num_limbs) } @@ -193,23 +194,6 @@ impl SimpleGenerator for BaseSplitGenerator } } -/// Returns the largest `i` such that `base**i < n`. -const fn logarithm(n: usize, base: usize) -> usize { - assert!(n > 0); - assert!(base > 1); - let mut i = 0; - let mut cur: usize = 1; - loop { - let (mul, overflow) = cur.overflowing_mul(base); - if overflow || mul >= n { - return i; - } else { - i += 1; - cur = mul; - } - } -} - #[cfg(test)] mod tests { use anyhow::Result; diff --git a/util/src/lib.rs b/util/src/lib.rs index 61677ff0..33fe7ab4 100644 --- a/util/src/lib.rs +++ b/util/src/lib.rs @@ -38,6 +38,23 @@ pub fn log2_strict(n: usize) -> usize { res as usize } +/// Returns the largest `i` such that `base**i < n`. +pub const fn log_floor(n: usize, base: usize) -> usize { + assert!(n > 0); + assert!(base > 1); + let mut i = 0; + let mut cur: usize = 1; + loop { + let (mul, overflow) = cur.overflowing_mul(base); + if overflow || mul >= n { + return i; + } else { + i += 1; + cur = mul; + } + } +} + /// Permutes `arr` such that each index is mapped to its reverse in binary. pub fn reverse_index_bits(arr: &[T]) -> Vec { let n = arr.len();