Я знаю 3 метода, но, насколько мне известно, обычно используются только первые 2:
  1) Отметьте бит знака с помощью andps или andnotps.
- Плюсы: одна быстрая инструкция, если маска уже находится в регистре, что делает ее идеальной для выполнения этого много раз в цикле.
 - Минусы: Маска может быть не в регистре или хуже, даже в кеше, что вызывает очень длинную выборку памяти.
 
2) Вычтите значение от нуля до отрицания, а затем получите max оригинала и отрицание.
- Плюсы: фиксированная стоимость, потому что ничего не нужно, чтобы получить, например, маску.
 -  Минусы: всегда будет медленнее, чем метод маски, если условия идеальны, и мы должны дождаться завершения 
subpsперед использованием командыmaxps. 
  3) Как и в случае с вариантом 2, вычтите исходное значение из нуля для отрицания, но затем "побитовое" и результат с оригиналом, используя andps. Я провел тест, сравнивая это с методом 2, и, похоже, он ведет себя одинаково с методом 2, кроме случаев, когда имеет дело с NaN s, и в этом случае результат будет другим результатом NaN, чем метод 2.
-  Плюсы: должно быть немного быстрее, чем метод 2, потому что 
andpsобычно быстрее, чемmaxps. -  Минусы: может ли это привести к непреднамеренному поведению, когда 
NaNзадействован? Может быть, нет, потому чтоNaNпо-прежнему являетсяNaN, даже если это другое значениеNaN, правильно? 
Мысли и мнения приветствуются.