Can't mode bit shuffling be avoided by using negated versions of the desired quantites? Interval x { double hi, lo }; Interval(max,min) {hi = max; lo = -min; } add(x,y) { hi = (x.hi+y.hi)/CEIL; lo = (x.lo+y.lo)/CEIL; } negate(x) { hi = x.lo; lo = x.hi; } Multiply is still a morass, though. Bob