Oops. I was off by a couple orders of magnitude on the error. Try: case 1200: /* A factor of 1.1011011 gives about .25% error. */ if (time_adj < 0) { time_adj -= (-time_adj >> 1); time_adj -= (-time_adj >> 3) + (-time_adj >> 6); } else { time_adj += (time_adj >> 1); time_adj += (time_adj >> 3) + (time_adj >> 6); } break; B-)