30 const size_t table_bits)
31 : _table_bits(table_bits)
40 const auto slice_scalar = [&](
const field_t& scalar,
const size_t num_bits) {
45 result.first.reserve(
static_cast<size_t>(1ULL) << table_bits);
46 result.second.reserve(
static_cast<size_t>(1ULL) << table_bits);
52 const size_t num_slices = (num_bits + table_bits - 1) / table_bits;
53 const uint64_t table_mask = (1ULL << table_bits) - 1ULL;
55 for (
size_t i = 0; i < num_slices; ++i) {
56 uint64_t slice_v =
static_cast<uint64_t
>(raw_value.
data[0]) & table_mask;
57 result.first.push_back(
field_t(slice_v));
58 result.second.push_back(slice_v);
59 raw_value = raw_value >> table_bits;
65 const uint64_t table_mask = (1ULL << table_bits) - 1ULL;
66 const size_t num_slices = (num_bits + table_bits - 1) / table_bits;
67 for (
size_t i = 0; i < num_slices; ++i) {
68 uint64_t slice_v =
static_cast<uint64_t
>(raw_value.
data[0]) & table_mask;
69 result.second.push_back(slice_v);
70 raw_value = raw_value >> table_bits;
73 if constexpr (IS_ULTRA) {
74 const auto slice_indices =
75 context->decompose_into_default_range(scalar.get_normalized_witness_index(),
78 "straus_scalar_slice decompose_into_default_range");
79 for (
auto& idx : slice_indices) {
83 for (
size_t i = 0; i < num_slices; ++i) {
84 uint64_t slice_v = result.second[i];
87 context->create_range_constraint(
88 slice.get_witness_index(), table_bits,
"straus_scalar_slice create_range_constraint");
90 result.first.push_back(
slice);
93 FF scaling_factor = 1;
94 for (
size_t i = 0; i < num_slices; ++i) {
95 linear_elements.emplace_back(result.first[i] * scaling_factor);
96 scaling_factor += scaling_factor;
103 const size_t lo_bits =
105 const size_t hi_bits =
107 auto hi_slices = slice_scalar(scalar.
hi, hi_bits);
108 auto lo_slices = slice_scalar(scalar.
lo, lo_bits);
std::conditional_t< IsGoblinBigGroup< C, Fq, Fr, G >, element_goblin::goblin_element< C, goblin_field< C >, Fr, G >, element_default::element< C, Fq, Fr, G > > element
element wraps either element_default::element or element_goblin::goblin_element depending on parametr...