RxTx (13.04.2024 21:41, просмотров: 80) ответил Idler на Маленький вопросик: Есть uint16_t captures[4]. Как самым быстрым
способом найти в нем второе сверху по величине значение.
Сортировка, даже 4 значений, дольше, чем хотелось бы. Вроде бы
можно сделать несколько сравнений с построением индекса (т.е, по
результату первого сравнения +1, по второму +2, по третьему +4
и.т.д), потом таблично. Но вариантов размещения 4 чисел всего 24, а
сравнение каждого с каждым дает индекс [0..63], то есть 6 сравнений
избыточны...
Без бранчей int max = a ^ ((a ^ b) & -(a < b)); Но
GCC/ICC/ICX/Clang это раскусывает и генерит более быстрый и мелкий
код с бранчами либо с conditional mov.
Спасибо, князь. Вы настоящий дворянин. И программист.