Интересная задачка (С/C++)
Есть машина (допустим, абстрактная), у которой очень медленные операции ветвления и переходов, но относительно быстрая целочисленная арифметика (скажем, один переход равен 128 арифметическим операциям по времени выполнения). Архитектурно отрицательные числа представлены в дополнительном коде (2’s complement format), как практически везде на сегодняшний день.
Есть следующий код, который вычисляет позицию внутри массива для циклического буфера. :
delay_position = buffer_position - delay; if (delay_position < 0) { delay_position = buffer_length + delay_position; }
И вот такой код, который проверяет выход за границы циклического буфера:
if (buffer_position >= buffer_length) { buffer_position = 0; }
Все переменные типа int, размер int’а неизвестен, должен вычисляться через sizeof()
Задача. Нужно сохранить логику и избавиться от сравнений (было написано условий) в любом виде, должно остаться только линейное выполнение кода.
363 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів