The algorithm is very simple: it's subtraction. The trickery lies in the fact that your result may be off by n*360 where n is any integer, positive or negative. If you're correcting the range of your angles at every step, bram's code will be fine (since it only deals with results off by +-720,) but I prefer a more robust approach:
Another way to modify the range would be
; calculate difference relative_angle = target_angle - initial_angle ; simplify range to [0,360) relative_angle = relative_angle Mod 360 : If relative_angle < 0 Then relative_angle = relative_angle + 360 ; modify simplified range to (-180,180] If relative_angle > 180 Then relative_angle = relative_angle - 360 If relative_angle < 0 Then turn_counter_clockwise() If relative_angle > 0 Then turn_clockwise()
Another way to modify the range would be
While relative_angle < -180 : relative_angle = relative_angle + 360 : Wend While relative_angle >= 180 : relative_angle = relative_angle - 360 : Wend