Написать "модуль" компилятора, реализующий операции целочисленного div и mod для константного делителя без использования соответствующих инструкций процессора.
Для процессора делить
Вспомним, что деление
-
13 / 5 = 2; mod = 3
-
-13 / 5 = -2; mod = -3
-
13 / -5 = -2; mod = 3
-
-13 / -5 = 2; mod = -3
Получается, нам достаточно научиться делить в случае натуральных чисел. Для деления целых приведём их по модулю к натуральным (целым беззнаковым). Обозначим делимое как
Остаётся самый нетривиальный момент
Пусть мы хотим посчитать
Таким образом деление используется только на моменте предподсчёта.
В корне проекта:
foo@bar:~$ cd build
foo@bar:~/build$ cmake ../
foo@bar:~/build$ cmake --build .
foo@bar:~/build$ ./divmod
В данной статье рассматривается более быстрый алгоритм получения модуля числа. А в данной статье рассматривается более быстрое деление. В дальнейшем будет проведено сравнение скоростей этих алгоритмов.