Skip to content

Commit ab22e76

Browse files
committed
some code simplifications in mpn
plus remove duplicated assertion
1 parent 4fe4234 commit ab22e76

File tree

2 files changed

+12
-26
lines changed

2 files changed

+12
-26
lines changed

src/util/mpn.cpp

+12-25
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,20 @@ Revision History:
2121
#include "util/buffer.h"
2222
#include "util/mpn.h"
2323

24-
#define max(a,b) (((a) > (b)) ? (a) : (b))
25-
2624
typedef uint64_t mpn_double_digit;
2725
static_assert(sizeof(mpn_double_digit) == 2 * sizeof(mpn_digit), "size alignment");
2826

29-
const mpn_digit mpn_manager::zero = 0;
30-
3127
int mpn_manager::compare(mpn_digit const * a, unsigned lnga,
3228
mpn_digit const * b, unsigned lngb) const {
3329
int res = 0;
3430

3531
trace(a, lnga);
3632

37-
unsigned j = max(lnga, lngb);
33+
unsigned j = std::max(lnga, lngb);
3834
for (; j-- > 0 && res == 0;) {
39-
mpn_digit const & u_j = (j < lnga) ? a[j] : zero;
40-
mpn_digit const & v_j = (j < lngb) ? b[j] : zero;
41-
if (u_j > v_j)
35+
mpn_digit u_j = (j < lnga) ? a[j] : 0;
36+
mpn_digit v_j = (j < lngb) ? b[j] : 0;
37+
if (u_j > v_j)
4238
res = 1;
4339
else if (u_j < v_j)
4440
res = -1;
@@ -56,14 +52,14 @@ bool mpn_manager::add(mpn_digit const * a, unsigned lnga,
5652
unsigned * plngc) const {
5753
trace(a, lnga, b, lngb, "+");
5854
// Essentially Knuth's Algorithm A
59-
unsigned len = max(lnga, lngb);
55+
unsigned len = std::max(lnga, lngb);
6056
SASSERT(lngc_alloc == len+1 && len > 0);
6157
mpn_digit k = 0;
6258
mpn_digit r;
6359
bool c1, c2;
6460
for (unsigned j = 0; j < len; j++) {
65-
mpn_digit const & u_j = (j < lnga) ? a[j] : zero;
66-
mpn_digit const & v_j = (j < lngb) ? b[j] : zero;
61+
mpn_digit u_j = (j < lnga) ? a[j] : 0;
62+
mpn_digit v_j = (j < lngb) ? b[j] : 0;
6763
r = u_j + v_j; c1 = r < u_j;
6864
c[j] = r + k; c2 = c[j] < r;
6965
k = c1 | c2;
@@ -81,13 +77,13 @@ bool mpn_manager::sub(mpn_digit const * a, unsigned lnga,
8177
mpn_digit * c, mpn_digit * pborrow) const {
8278
trace(a, lnga, b, lngb, "-");
8379
// Essentially Knuth's Algorithm S
84-
unsigned len = max(lnga, lngb);
80+
unsigned len = std::max(lnga, lngb);
8581
mpn_digit & k = *pborrow; k = 0;
8682
mpn_digit r;
8783
bool c1, c2;
8884
for (unsigned j = 0; j < len; j++) {
89-
mpn_digit const & u_j = (j < lnga) ? a[j] : zero;
90-
mpn_digit const & v_j = (j < lngb) ? b[j] : zero;
85+
mpn_digit u_j = (j < lnga) ? a[j] : 0;
86+
mpn_digit v_j = (j < lngb) ? b[j] : 0;
9187
r = u_j - v_j; c1 = r > u_j;
9288
c[j] = r - k; c2 = c[j] > r;
9389
k = c1 | c2;
@@ -112,14 +108,14 @@ bool mpn_manager::mul(mpn_digit const * a, unsigned lnga,
112108
c[i] = 0;
113109

114110
for (unsigned j = 0; j < lngb; j++) {
115-
mpn_digit const & v_j = b[j];
111+
mpn_digit v_j = b[j];
116112
if (v_j == 0) { // This branch may be omitted according to Knuth.
117113
c[j+lnga] = 0;
118114
}
119115
else {
120116
k = 0;
121117
for (i = 0; i < lnga; i++) {
122-
mpn_digit const & u_i = a[i];
118+
mpn_digit u_i = a[i];
123119
mpn_double_digit t;
124120
t = ((mpn_double_digit)u_i * (mpn_double_digit)v_j) +
125121
(mpn_double_digit) c[i+j] +
@@ -156,15 +152,6 @@ bool mpn_manager::div(mpn_digit const * numer, unsigned lnum,
156152
return false;
157153
}
158154

159-
bool all_zero = true;
160-
for (unsigned i = 0; i < lden && all_zero; i++)
161-
if (denom[i] != zero) all_zero = false;
162-
163-
if (all_zero) {
164-
UNREACHABLE();
165-
return res;
166-
}
167-
168155
SASSERT(denom[lden-1] != 0);
169156

170157
if (lnum == 1 && lden == 1) {

src/util/mpn.h

-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ class mpn_manager {
5353
private:
5454
using mpn_sbuffer = sbuffer<mpn_digit>;
5555

56-
static const mpn_digit zero;
5756
void display_raw(std::ostream & out, mpn_digit const * a, unsigned lng) const;
5857

5958
unsigned div_normalize(mpn_digit const * numer, unsigned lnum,

0 commit comments

Comments
 (0)