Похоже, это работает нормально для меня. Значение pi, вероятно, недостаточно точное, поэтому вы получаете очень точную оценку. Если вы подумаете об этом, 6.123234e-17 и -1.836970e-16 очень и очень близки к 0, что и должен быть ответ.
Ваша проблема заключается в том, что, хотя на бумаге 90 * pi / 180 = pi / 2, в компьютерах мы используем числа с плавающей запятой. Я не уверен, что R / Matlab использует, но я бы определенно предположил, 32-разрядное или 64-разрядное число с плавающей запятой. И вы можете разместить столько информации только в этом ограниченном количестве битов, поэтому вы не можете хранить все возможные десятичные числа.
Вы можете изменить свою функцию так, чтобы при заданных 90 или 270 возвращать 0.