diff --git a/src/gates/arithmetic_u32.rs b/src/gates/arithmetic_u32.rs index dddc35b2..7732364e 100644 --- a/src/gates/arithmetic_u32.rs +++ b/src/gates/arithmetic_u32.rs @@ -299,15 +299,14 @@ impl, const D: usize> SimpleGenerator out_buffer.set_wire(output_high_wire, output_high); out_buffer.set_wire(output_low_wire, output_low); + let num_limbs = U32ArithmeticGate::::num_limbs(); let limb_base = 1 << U32ArithmeticGate::::limb_bits(); let output_limbs_u64: Vec<_> = unfold((), move |_| { - if output_u64 == 0 { - return None; - } let ret = output_u64 % limb_base; output_u64 /= limb_base; Some(ret) }) + .take(num_limbs) .collect(); let output_limbs_F: Vec<_> = output_limbs_u64 .iter() @@ -315,7 +314,7 @@ impl, const D: usize> SimpleGenerator .map(F::from_canonical_u64) .collect(); - for j in 0..output_limbs_F.len() { + for j in 0..num_limbs { let wire = local_wire(U32ArithmeticGate::::wire_ith_output_jth_limb( self.i, j, ));