Multiplication by 1.6 is equivalent to multiplication by ¹⁶⁄₁₀ or ⁸⁄₅, and division by 1.6 is equivalent to multiplication by ⁵⁄₈ or ¹⁰⁄₁₆
So to multiply you can do like either of this
big.shiftLeft(4).divide(BigInteger.TEN);
big.shiftLeft(3).divide(BigInteger.valueOf(5));
No need to use BigDecimal
Since the division is constant you can even convert it into a multiplication by the inverse although it might not worth it in this case
Similarly division can be done like this
big.multiply(BigInteger.TEN).shiftRight(4);
big.multiply(BigInteger.valueOf(5)).shiftRight(3);
If the value is negative you'll need a small change though because right shift rounds down instead of rounding towards zero
But if you need to do this millions of times then Java is probably the wrong choice. There are many excellent native big integer libraries, just call them using Java NDK. They're fast because they're native, but some can utilize SIMD so they'll significantly faster. For example y-cruncher can use AVX-512 for multiplication. See also Fast Multiple-Precision Integer Division Using Intel AVX-512
If you have multiple independent BigInteger
s then you can also do then in parallel using multiple threads