Скажем, у меня в программе был действительно критичный к производительности цикл, в котором мне нужно проверить, находится ли точка внутри прямоугольника, но во время компиляции я знаю, что нижняя граница всегда будет равна 0, как показано ниже: (x >= 0 && y >= 0 && x < width && y < height)
Могу ли я исключить первые два сравнения, вводя символы x и y в беззнаковые целые числа (например, с чем-то вроде reinterpret_cast<>()
или union
в C++), поскольку знаковый бит гарантирует, что любое отрицательное число превратится в unsigned int
, достаточно большое, чтобы не выполнить проверку. проверка границ? Если да, то как бы вы реализовали это на C++ или другом языке? Могли бы вы добиться улучшения производительности, сделав это?
static_cast
для преобразования целочисленных типов. Вы также можете попробовать сравнить сборку, чтобы увидеть, оптимизирует ли компилятор ее автоматически. - person Neil Kirk   schedule 19.01.2015