31template <
typename Builder>
37 Builder* ctx =
a.get_context() ?
a.get_context() :
b.get_context();
40 uint256_t normalized_sum =
static_cast<uint32_t
>(
sum.data[0]);
42 if (
a.is_constant() &&
b.is_constant()) {
43 return field_pt(ctx, normalized_sum);
46 fr overflow_value =
fr((
sum - normalized_sum) >> 32);
void create_range_constraint(size_t num_bits, std::string const &msg="field_t::range_constraint") const
Let x = *this.normalize(), constrain x.v < 2^{num_bits}.
stdlib::witness_t< bb::UltraCircuitBuilder > witness_pt
stdlib::field_t< UltraCircuitBuilder > field_pt
field_t< Builder > add_normalize_unsafe(const field_t< Builder > &a, const field_t< Builder > &b, size_t overflow_bits)
Compute (a + b) mod 2^32 with circuit constraints.
field< Bn254FrParams > fr
Inner sum(Cont< Inner, Args... > const &in)