public static double WrapError(double value, double setpoint, double min, double max) { double error = setpoint - value; if (Math.Abs(error) <= (max - min)/2) return error; if (error < 0) //value > setpoint { return (max - value) + (setpoint - min); } else { return (min - value) - (max - setpoint); } }