LongRangeSet (LongRangeSet multiplier, LongRangeType lrType) { if (multiplier.isEmpty()) return multiplier; if (multiplier instanceof Point) return multiplier.mul(this, lrType); BitString thisMask = getBitwiseMask(); BitString thatMask = multiplier.getBitwiseMask(); int numZeros = Math.min(6, Math.min(Long.numberOfTrailingZeros(thisMask.myBits), Long.numberOfTrailingZeros(~thisMask.myMask)) + Math.min(Long.numberOfTrailingZeros(thatMask.myBits), Long.numberOfTrailingZeros(~thatMask.myMask))); return modRange(lrType.min(), lrType.max(), 1L << numZeros, 1L); }