@@ -36,19 +36,13 @@ void karatsuba_multiply(InputIt a_begin, InputIt a_end, InputIt b_begin, InputIt
3636 size_t half_size = std::max (a_size, b_size) / 2 ;
3737
3838 // Split the polynomials
39- auto a_low_begin = a_begin;
40- auto a_low_end = (a_size > half_size) ? a_begin + half_size : a_end;
41- auto a_high_begin = (a_size > half_size) ? a_begin + half_size : a_end;
42- auto a_high_end = a_end;
43- auto b_low_begin = b_begin;
44- auto b_low_end = (b_size > half_size) ? b_begin + half_size : b_end;
45- auto b_high_begin = (b_size > half_size) ? b_begin + half_size : b_end;
46- auto b_high_end = b_end;
39+ auto a_mid = (a_size > half_size) ? a_begin + half_size : a_end;
40+ auto b_mid = (b_size > half_size) ? b_begin + half_size : b_end;
4741
48- size_t a_low_size = std::distance (a_low_begin, a_low_end );
49- size_t b_low_size = std::distance (b_low_begin, b_low_end );
50- size_t a_high_size = std::distance (a_high_begin, a_high_end );
51- size_t b_high_size = std::distance (b_high_begin, b_high_end );
42+ size_t a_low_size = std::distance (a_begin, a_mid );
43+ size_t b_low_size = std::distance (b_begin, b_mid );
44+ size_t a_high_size = std::distance (a_mid, a_end );
45+ size_t b_high_size = std::distance (b_mid, b_end );
5246 size_t a_max_size = std::max (a_low_size, a_high_size);
5347 size_t b_max_size = std::max (b_low_size, b_high_size);
5448 size_t part_size = a_max_size + b_max_size - 1 ;
@@ -58,21 +52,21 @@ void karatsuba_multiply(InputIt a_begin, InputIt a_end, InputIt b_begin, InputIt
5852 std::vector<T> z2 (part_size);
5953
6054 // z0 = a_low * b_low
61- karatsuba_multiply (a_low_begin, a_low_end, b_low_begin, b_low_end , z0.begin ());
55+ karatsuba_multiply (a_begin, a_mid, b_begin, b_mid , z0.begin ());
6256 // z2 = a_high * b_high
63- karatsuba_multiply (a_high_begin, a_high_end, b_high_begin, b_high_end , z2.begin ());
57+ karatsuba_multiply (a_mid, a_end, b_mid, b_end , z2.begin ());
6458
6559 // z1 = (a_low + a_high) * (b_low + b_high) - z0 - z2
6660 std::vector<T> a_sum (std::max (a_low_size, a_high_size));
6761 for (size_t i = 0 ; i < a_low_size; ++i)
68- a_sum[i] += a_low_begin [i];
62+ a_sum[i] += a_begin [i];
6963 for (size_t i = 0 ; i < a_high_size; ++i)
70- a_sum[i] += a_high_begin [i];
64+ a_sum[i] += a_mid [i];
7165 std::vector<T> b_sum (std::max (b_low_size, b_high_size));
7266 for (size_t i = 0 ; i < b_low_size; ++i)
73- b_sum[i] += b_low_begin [i];
67+ b_sum[i] += b_begin [i];
7468 for (size_t i = 0 ; i < b_high_size; ++i)
75- b_sum[i] += b_high_begin [i];
69+ b_sum[i] += b_mid [i];
7670 karatsuba_multiply (a_sum.begin (), a_sum.end (), b_sum.begin (), b_sum.end (),
7771 z1.begin ());
7872 for (size_t i = 0 ; i < part_size; ++i)
0 commit comments