Remove rev in computation of the reversed sum in BaseSplitGenerator.

This commit is contained in:
wborgeaud 2021-06-16 08:15:44 +02:00
parent 89b25c528c
commit ab7e2381a2
2 changed files with 14 additions and 8 deletions

View File

@ -82,10 +82,13 @@ mod tests {
let two = builder.two(); let two = builder.two();
let three = builder.constant(F::from_canonical_u64(3)); let three = builder.constant(F::from_canonical_u64(3));
let five = builder.constant(F::from_canonical_u64(5)); let five = builder.constant(F::from_canonical_u64(5));
builder.assert_equal(limbs[0], two); builder.route(limbs[0], two);
builder.assert_equal(limbs[1], three); builder.route(limbs[1], three);
builder.assert_equal(limbs[2], five); builder.route(limbs[2], five);
builder.assert_equal(limbs[3], one); builder.route(limbs[3], one);
let rev = builder.constant(F::from_canonical_u64(11));
let revt = builder.reverse_bits::<2>(xt, 9);
builder.route(revt, rev);
builder.assert_trailing_zeros::<6>(xt, 4); builder.assert_trailing_zeros::<6>(xt, 4);
builder.assert_trailing_zeros::<4>(xt, 5); builder.assert_trailing_zeros::<4>(xt, 5);

View File

@ -145,19 +145,22 @@ impl<F: Field, const B: usize> SimpleGenerator<F> for BaseSplitGenerator<B> {
.scan(sum_value, |acc, _| { .scan(sum_value, |acc, _| {
let tmp = *acc % B; let tmp = *acc % B;
*acc /= B; *acc /= B;
Some(tmp) Some(F::from_canonical_usize(tmp))
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let reversed_sum = limbs_value.iter().rev().fold(0, |acc, &x| acc * B + x); let b_field = F::from_canonical_usize(B);
let reversed_sum = limbs_value
.iter()
.fold(F::ZERO, |acc, &x| acc * b_field + x);
let mut result = PartialWitness::new(); let mut result = PartialWitness::new();
result.set_target( result.set_target(
Target::wire(self.gate_index, BaseSumGate::<B>::WIRE_REVERSED_SUM), Target::wire(self.gate_index, BaseSumGate::<B>::WIRE_REVERSED_SUM),
F::from_canonical_usize(reversed_sum), reversed_sum,
); );
for (b, b_value) in limbs.zip(limbs_value) { for (b, b_value) in limbs.zip(limbs_value) {
result.set_target(b, F::from_canonical_usize(b_value)); result.set_target(b, b_value);
} }
result result