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