@@ -57,11 +57,11 @@ adjust_size (unsigned size)
57
57
inline int
58
58
digit_cmp (onedig_t const *a, onedig_t const *b, unsigned n)
59
59
{
60
- for (int i = n; -- i >= 0 ; )
60
+ for (unsigned i = n; i > 0 ; --i )
61
61
{
62
- if (a[i] < b[i])
62
+ if (a[i - 1 ] < b[i - 1 ])
63
63
return -1 ;
64
- else if (a[i] > b[i])
64
+ else if (a[i - 1 ] > b[i - 1 ])
65
65
return 1 ;
66
66
}
67
67
return 0 ;
@@ -135,7 +135,7 @@ static _fast onedig_t
135
135
digit_mul (onedig_t *b, unsigned l, onedig_t d)
136
136
{
137
137
twodig_t p = 0 ;
138
- for (int i = l; -- i >= 0 ; )
138
+ for (unsigned i = l; i > 0 ; --i )
139
139
{
140
140
p += twodig_t (d) * twodig_t (*b);
141
141
*b++ = onedig_t (p);
@@ -176,11 +176,11 @@ static _fast onedig_t
176
176
digit_div (onedig_t *b, unsigned l, onedig_t d)
177
177
{
178
178
twodig_t r = 0 ;
179
- for (int i = l; -- i >= 0 ; )
179
+ for (unsigned i = l; i > 0 ; --i )
180
180
{
181
181
r <<= single_bits;
182
- r |= b[i];
183
- b[i] = onedig_t (r / d);
182
+ r |= b[i - 1 ];
183
+ b[i - 1 ] = onedig_t (r / d);
184
184
r %= d;
185
185
}
186
186
return onedig_t (r);
@@ -258,7 +258,8 @@ static _fast void
258
258
digit_div (onedig_t *r, const onedig_t *y, unsigned yl, onedig_t *q, unsigned ql)
259
259
{
260
260
r += ql;
261
- for (int i = ql; --r, --i >= 0 ; )
261
+ --r;
262
+ for (unsigned i = ql; i > 0 ; --r, --i)
262
263
{
263
264
onedig_t qh = guess_q (r + yl, y + yl - 1 );
264
265
if (multiply_and_subtract (r, y, yl, qh) == 0 )
@@ -267,7 +268,7 @@ digit_div (onedig_t *r, const onedig_t *y, unsigned yl, onedig_t *q, unsigned ql
267
268
add_back (r, y, yl);
268
269
}
269
270
if (q != 0 )
270
- q[i] = qh;
271
+ q[i - 1 ] = qh;
271
272
}
272
273
}
273
274
@@ -501,16 +502,16 @@ BigInt::scan_on (char const *s, onedig_t b)
501
502
for (char c = *s; c; c = *++s)
502
503
{
503
504
// Convert digit. Use 0..9A..Z for singles up to 36. Ignoring case.
504
- c = toupper (c);
505
+ c = ( char ) toupper (c);
505
506
onedig_t dig;
506
507
if (c < ' 0' )
507
508
return s;
508
509
else if (c <= ' 9' )
509
- dig = c - ' 0' ;
510
+ dig = ( onedig_t )( c - ' 0' ) ;
510
511
else if (c < ' A' )
511
512
return s;
512
513
else if (c <= ' Z' )
513
- dig = c - ' A' + 10 ;
514
+ dig = ( onedig_t )( c - ' A' + 10 ) ;
514
515
else
515
516
return s;
516
517
if (dig >= b)
@@ -584,7 +585,7 @@ BigInt::as_string (char *p, unsigned l, onedig_t b) const
584
585
if (l == 0 )
585
586
return 0 ;
586
587
onedig_t r = digit_div (dig, len, b);
587
- p[--l] = r < 10 ? r + ' 0' : ' A' + r - 10 ;
588
+ p[--l] = ( char )( r < 10 ? r + ' 0' : ' A' + r - 10 ) ;
588
589
if (dig[len-1 ] == 0 )
589
590
--len;
590
591
}
@@ -631,7 +632,7 @@ BigInt::dump (unsigned char *p, unsigned n)
631
632
for (;;)
632
633
{
633
634
while (i--)
634
- *p++ = d >> i * CHAR_BIT;
635
+ *p++ = ( unsigned char )( d >> i * CHAR_BIT) ;
635
636
if (t <= digit)
636
637
break ;
637
638
d = *--t;
@@ -682,27 +683,27 @@ BigInt::is_long() const
682
683
return false ;
683
684
// There is exactly one good signed number n with abs (n) having the
684
685
// topmost bit set: The most negative number.
685
- for (int l = length - 1 ; -- l >= 0 ; )
686
- if (digit[l] != 0 )
686
+ for (unsigned l = length - 1 ; l > 0 ; --l )
687
+ if (digit[l - 1 ] != 0 )
687
688
return false ;
688
689
return true ;
689
690
}
690
691
691
692
ullong_t BigInt::to_ulong () const
692
693
{
693
694
ullong_t ul = 0 ;
694
- for (int i = length; -- i >= 0 ; )
695
+ for (unsigned i = length; i > 0 ; --i )
695
696
{
696
697
ul <<= single_bits;
697
- ul |= digit[i];
698
+ ul |= digit[i - 1 ];
698
699
}
699
700
return ul;
700
701
}
701
702
702
703
llong_t BigInt::to_long () const
703
704
{
704
- ullong_t ul = to_ulong ();
705
- return positive ? ul : -llong_t (ul) ;
705
+ llong_t l = llong_t ( to_ulong () );
706
+ return positive ? l : -l ;
706
707
}
707
708
708
709
@@ -752,7 +753,7 @@ BigInt::compare (llong_t b) const
752
753
753
754
onedig_t dig[small];
754
755
unsigned len;
755
- digit_set (-b , dig, len);
756
+ digit_set (ullong_t (-b) , dig, len);
756
757
if (length < len)
757
758
return 1 ;
758
759
if (length > len)
@@ -904,7 +905,7 @@ BigInt &
904
905
BigInt::operator += (llong_t y)
905
906
{
906
907
bool pos = y > 0 ;
907
- ullong_t uy = pos ? y : -y ;
908
+ ullong_t uy = pos ? ullong_t (y) : ullong_t (-y) ;
908
909
onedig_t yb[small];
909
910
unsigned yl;
910
911
digit_set (uy, yb, yl);
@@ -916,7 +917,7 @@ BigInt &
916
917
BigInt::operator -= (llong_t y)
917
918
{
918
919
bool pos = y > 0 ;
919
- ullong_t uy = pos ? y : -y ;
920
+ ullong_t uy = pos ? ullong_t (y) : ullong_t (-y) ;
920
921
onedig_t yb[small];
921
922
unsigned yl;
922
923
digit_set (uy, yb, yl);
@@ -928,7 +929,7 @@ BigInt &
928
929
BigInt::operator *= (llong_t y)
929
930
{
930
931
bool pos = y > 0 ;
931
- ullong_t uy = pos ? y : -y ;
932
+ ullong_t uy = pos ? ullong_t (y) : ullong_t (-y) ;
932
933
onedig_t yb[small];
933
934
unsigned yl;
934
935
digit_set (uy, yb, yl);
@@ -940,7 +941,7 @@ BigInt &
940
941
BigInt::operator /= (llong_t y)
941
942
{
942
943
bool pos = y > 0 ;
943
- ullong_t uy = pos ? y : -y ;
944
+ ullong_t uy = pos ? ullong_t (y) : ullong_t (-y) ;
944
945
onedig_t yb[small];
945
946
unsigned yl;
946
947
digit_set (uy, yb, yl);
@@ -951,7 +952,7 @@ BigInt &
951
952
BigInt::operator %= (llong_t y)
952
953
{
953
954
bool pos = y > 0 ;
954
- ullong_t uy = pos ? y : -y ;
955
+ ullong_t uy = pos ? ullong_t (y) : ullong_t (-y) ;
955
956
onedig_t yb[small];
956
957
unsigned yl;
957
958
digit_set (uy, yb, yl);
@@ -1077,7 +1078,7 @@ BigInt::div (BigInt const &x, BigInt const &y, BigInt &q, BigInt &r)
1077
1078
// This digit_div() transforms the dividend into the quotient.
1078
1079
q = y;
1079
1080
r.digit [0 ] = digit_div (q.digit , q.length , y.digit [0 ]);
1080
- r.length = r.digit [0 ] ? 1 : 0 ;
1081
+ r.length = r.digit [0 ] ? 1u : 0u ;
1081
1082
}
1082
1083
else
1083
1084
{
@@ -1268,22 +1269,22 @@ BigInt::operator%= (BigInt const &y)
1268
1269
unsigned
1269
1270
BigInt::floorPow2 () const
1270
1271
{
1271
- int i = length - 1 ; // Start on the last value
1272
- while (i >= 0 && digit[i] == 0 ) {
1272
+ unsigned i = length; // Start on the last value
1273
+ while (i > 0 && digit[i - 1 ] == 0 ) {
1273
1274
--i; // Skip zeros
1274
1275
}
1275
- if (i < 0 ) {
1276
+ if (i == 0 ) {
1276
1277
return 0 ; // Special case
1277
1278
}
1278
1279
1279
1280
twodig_t power = 1 ;
1280
- int count = 0 ;
1281
+ unsigned count = 0 ;
1281
1282
1282
- while ((power << 1 ) <= (twodig_t )digit[i]) {
1283
+ while ((power << 1 ) <= (twodig_t )digit[i - 1 ]) {
1283
1284
++count, power <<= 1 ;
1284
1285
}
1285
1286
1286
- return (single_bits * i ) + count;
1287
+ return (single_bits * (i - 1 ) ) + count;
1287
1288
}
1288
1289
1289
1290
// Not part of original BigInt.
0 commit comments