Я хочу что-то в С++, что позволяет мне делать эффективное целочисленное деление с заданным действием округления, примерно так:
div_down(-4,3) ==> -2
div_up(4,3) ==> 2
div_to_zero(-4,3) ==> -1
div_to_nearest(5,3) ==> 2
Я бы хотел, чтобы он обнаруживал поведение целевой машины во время компиляции и генерировал соответствующие оптимальные реализации. Нечто подобное для модуля также было бы хорошим, абстрагировав поведение undefined для отрицательных операндов во время компиляции.
Это существует?
Если нет, какой хороший способ сделать это? Я могу придумать несколько возможных подходов:
- Попробуйте реализовать их как отдельные выражения, которые статически оптимизируют
- Используйте константные выражения для определения поведения цели и выбора из нескольких реализаций, возможно используя шаблоны (но как именно?)