1 import checkedint.sticky : safeOp; // use IntFlagPolicy.sticky
2
3 assert(safeOp.divPow2(65536, 8) == 256);
4 assert(safeOp.divPow2(-100, 100) == 0);
5 assert(safeOp.divPow2(-23, -5) == -736);
6
7 safeOp.divPow2(10_000_000, -10);
8 assert(IntFlags.local.clear() == IntFlag.posOver);
Equivalent to left / pow(2, exp), but faster and works with a wider range of inputs. This is a safer alternative to left >> exp that is still very fast.
Note that (conceptually) rounding occurs after the /, meaning that divPow2(left, -exp) is equivalent to mulPow2(left, exp).