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