@@ -294,8 +294,8 @@ private int compareShifted(MutableBigInteger b, int ints) {
294294 // comparison.
295295 int [] bval = b .value ;
296296 for (int i = offset , j = b .offset ; i < alen + offset ; i ++, j ++) {
297- int b1 = value [i ] + 0x80000000 ;
298- int b2 = bval [j ] + 0x80000000 ;
297+ int b1 = ( value [i ] + 0x80000000 )| 0 ;
298+ int b2 = ( bval [j ] + 0x80000000 )| 0 ;
299299 if (b1 < b2 )
300300 return -1 ;
301301 if (b1 > b2 )
@@ -889,9 +889,11 @@ void addDisjoint(MutableBigInteger addend, int n) {
889889 for (int i =rstart +1 -y +len ; i < rstart +1 ; i ++)
890890 result [i ] = 0 ;
891891
892- value = result ;
893892 intLen = resultLen ;
894893 offset = result .length - resultLen ;
894+
895+ value = result ;
896+
895897 }
896898
897899 /**
@@ -939,18 +941,17 @@ int subtract(MutableBigInteger b) {
939941 // Subtract common parts of both numbers
940942 while (y > 0 ) {
941943 x --; y --;
942-
943- diff = (a .value [x +a .offset ] & LONG_MASK ) -
944- (b .value [y +b .offset ] & LONG_MASK ) - (( int )-(diff >>32 ) );
944+ // 2024.02.22 BH long-long-int fails, now (long-long)-int
945+ diff = (( a .value [x +a .offset ] & LONG_MASK )
946+ - (b .value [y +b .offset ] & LONG_MASK )) - (int )-(diff >>32 );
945947 result [rstart --] = (int )diff ;
946948 }
947- // Subtract remainder of longer number
949+ // Subtract remainder of longer number
948950 while (x > 0 ) {
949951 x --;
950- diff = (a .value [x +a .offset ] & LONG_MASK ) - (( int )-(diff >>32 ) );
952+ diff = (a .value [x +a .offset ] & LONG_MASK ) - (int )-(diff >>32 );
951953 result [rstart --] = (int )diff ;
952954 }
953-
954955 value = result ;
955956 intLen = resultLen ;
956957 offset = value .length - resultLen ;
@@ -1261,6 +1262,8 @@ MutableBigInteger divideAndRemainderBurnikelZiegler(MutableBigInteger b, Mutable
12611262 int n = j * m ; // step 2b: block length in 32-bit units
12621263 long n32 = 32L * n ; // block length in bits
12631264 int sigma = (int ) Math .max (0 , n32 - b .bitLength ()); // step 3: sigma = max{T | (2^T)*B < beta^n}
1265+
1266+
12641267 MutableBigInteger bShifted = new MutableBigInteger (b );
12651268 bShifted .safeLeftShift (sigma ); // step 4a: shift b so its length is a multiple of n
12661269 MutableBigInteger aShifted = new MutableBigInteger (this );
@@ -1278,7 +1281,6 @@ MutableBigInteger divideAndRemainderBurnikelZiegler(MutableBigInteger b, Mutable
12781281 // step 7: z[t-2] = [a[t-1], a[t-2]]
12791282 MutableBigInteger z = aShifted .getBlock (t -2 , t , n ); // the second to most significant block
12801283 z .addDisjoint (a1 , n ); // z[t-2]
1281-
12821284 // do schoolbook division on blocks, dividing 2-block numbers by 1-block numbers
12831285 MutableBigInteger qi = new MutableBigInteger ();
12841286 MutableBigInteger ri ;
@@ -1356,7 +1358,6 @@ private MutableBigInteger divide3n2n(MutableBigInteger b, MutableBigInteger quot
13561358 MutableBigInteger b1 = new MutableBigInteger (b );
13571359 b1 .safeRightShift (n * 32 );
13581360 BigInteger b2 = b .getLower (n );
1359-
13601361 MutableBigInteger r ;
13611362 MutableBigInteger d ;
13621363 if (compareShifted (b , n ) < 0 ) {
@@ -1381,6 +1382,7 @@ private MutableBigInteger divide3n2n(MutableBigInteger b, MutableBigInteger quot
13811382
13821383 // step 5: r = r*beta^n + a3 - d (paper says a4)
13831384 // However, don't subtract d until after the while loop so r doesn't become negative
1385+
13841386 r .leftShift (32 * n );
13851387 r .addLower (this , n );
13861388
@@ -1390,7 +1392,6 @@ private MutableBigInteger divide3n2n(MutableBigInteger b, MutableBigInteger quot
13901392 quotient .subtract (MutableBigInteger .ONE );
13911393 }
13921394 r .subtract (d );
1393-
13941395 return r ;
13951396 }
13961397
@@ -1548,13 +1549,13 @@ private MutableBigInteger divideMagnitude(MutableBigInteger div,
15481549 int qrem = 0 ;
15491550 boolean skipCorrection = false ;
15501551 int nh = rem .value [j +rem .offset ];
1551- int nh2 = nh + 0x80000000 ;
1552+ int nh2 = ( nh + 0x80000000 )| 0 ;
15521553 int nm = rem .value [j +1 +rem .offset ];
15531554
15541555 if (nh == dh ) {
15551556 qhat = ~0 ;
15561557 qrem = nh + nm ;
1557- skipCorrection = qrem + 0x80000000 < nh2 ;
1558+ skipCorrection = (( qrem + 0x80000000 )| 0 ) < nh2 ;
15581559 } else {
15591560 long nChunk = (((long )nh ) << 32 ) | (nm & LONG_MASK );
15601561 if (nChunk >= 0 ) {
@@ -1592,7 +1593,7 @@ private MutableBigInteger divideMagnitude(MutableBigInteger div,
15921593 int borrow = mulsub (rem .value , divisor , qhat , dlen , j +rem .offset );
15931594
15941595 // D5 Test remainder
1595- if (borrow + 0x80000000 > nh2 ) {
1596+ if ((( borrow + 0x80000000 )| 0 ) > nh2 ) {
15961597 // D6 Add back
15971598 divadd (divisor , rem .value , j +1 +rem .offset );
15981599 qhat --;
@@ -1607,13 +1608,13 @@ private MutableBigInteger divideMagnitude(MutableBigInteger div,
16071608 int qrem = 0 ;
16081609 boolean skipCorrection = false ;
16091610 int nh = rem .value [limit - 1 + rem .offset ];
1610- int nh2 = nh + 0x80000000 ;
1611+ int nh2 = ( nh + 0x80000000 )| 0 ;
16111612 int nm = rem .value [limit + rem .offset ];
16121613
16131614 if (nh == dh ) {
16141615 qhat = ~0 ;
16151616 qrem = nh + nm ;
1616- skipCorrection = qrem + 0x80000000 < nh2 ;
1617+ skipCorrection = (( qrem + 0x80000000 )| 0 ) < nh2 ;
16171618 } else {
16181619 long nChunk = (((long ) nh ) << 32 ) | (nm & LONG_MASK );
16191620 if (nChunk >= 0 ) {
@@ -1653,7 +1654,7 @@ private MutableBigInteger divideMagnitude(MutableBigInteger div,
16531654 borrow = mulsubBorrow (rem .value , divisor , qhat , dlen , limit - 1 + rem .offset );
16541655
16551656 // D5 Test remainder
1656- if (borrow + 0x80000000 > nh2 ) {
1657+ if ((( borrow + 0x80000000 )| 0 ) > nh2 ) {
16571658 // D6 Add back
16581659 if (needRemainder )
16591660 divadd (divisor , rem .value , limit - 1 + 1 + rem .offset );
@@ -1723,13 +1724,13 @@ private MutableBigInteger divideLongMagnitude(long ldivisor, MutableBigInteger q
17231724 int qrem = 0 ;
17241725 boolean skipCorrection = false ;
17251726 int nh = rem .value [j + rem .offset ];
1726- int nh2 = nh + 0x80000000 ;
1727+ int nh2 = ( nh + 0x80000000 )| 0 ;
17271728 int nm = rem .value [j + 1 + rem .offset ];
17281729
17291730 if (nh == dh ) {
17301731 qhat = ~0 ;
17311732 qrem = nh + nm ;
1732- skipCorrection = qrem + 0x80000000 < nh2 ;
1733+ skipCorrection = (( qrem + 0x80000000 )| 0 ) < nh2 ;
17331734 } else {
17341735 long nChunk = (((long ) nh ) << 32 ) | (nm & LONG_MASK );
17351736 if (nChunk >= 0 ) {
@@ -1767,7 +1768,7 @@ private MutableBigInteger divideLongMagnitude(long ldivisor, MutableBigInteger q
17671768 int borrow = mulsubLong (rem .value , dh , dl , qhat , j + rem .offset );
17681769
17691770 // D5 Test remainder
1770- if (borrow + 0x80000000 > nh2 ) {
1771+ if ((( borrow + 0x80000000 )| 0 ) > nh2 ) {
17711772 // D6 Add back
17721773 divaddLong (dh ,dl , rem .value , j + 1 + rem .offset );
17731774 qhat --;
@@ -1963,7 +1964,7 @@ static int binaryGcd(int a, int b) {
19631964 int t = (aZeros < bZeros ? aZeros : bZeros );
19641965
19651966 while (a != b ) {
1966- if ((a +0x80000000 ) > (b +0x80000000 )) { // a > b as unsigned
1967+ if ((( a +0x80000000 )| 0 ) > (( b +0x80000000 )| 0 )) { // a > b as unsigned
19671968 a -= b ;
19681969 a >>>= Integer .numberOfTrailingZeros (a );
19691970 } else {
0 commit comments