Делаешь таблицу-четвертинку размером в байт (256 точек). Переменная размером 2 байта - текущая фаза. Для адресации таблицы используем младший байт. При этом, если бит 0 в старшем байте фазы равен 1, значит надо взять дополнение к младшему байту. Если бит 1 в старшем байте 1, значит результат надо инвертировать. Вот и весь алгоритм.