Я конечно не программист, но согласен со SciFi о том, что нужно
использовать знаковую арифметику. По-моему увеличение беззнакового
числа 32767 на единицу в знаковой арифметике int16_t даст -1, а не
-32768. А чтобы перейти через точку переполнения результата, нужно
исходное число приводить в масштаб точно так же, как мы работаем с
синусом или косинусом - вычитать из числа период до тех пор, пока
оное число не станет меньше периода. P.S. количество вычитаний
можно так же считать и интерпретировать как количество периодов-полных оборотов.