Вот мой вклад. Кажется, работает для всех углов без проблем с краями. Это быстро. Это может сделать n180 [360000359] = -1 почти мгновенно. Обратите внимание, как функция Sign помогает выбрать правильный логический путь и позволяет использовать один и тот же код для разных углов.
храповик
n180[a_] :=
If[Abs[Mod[a, If[Sign[a] == 0, 360, Sign[a] 360]]] <= 180,
Mod[a, If[Sign[a] == 0, 360, Sign[a] 360]],
Mod[a, If[Sign[a] == 0, 360, -Sign[a] 360]]]