Necesito la forma más eficiente (en ciclos de CPU) para determinar si dos números tienen el mismo/diferente signo. Pero la trampa es que si cualquiera de los números es cero, necesito poder distinguirlo de los números con signos iguales/diferentes (es decir, cero se trata como un "tercer" signo). El siguiente código es similar a lo que necesito, pero los valores de retorno pueden ser cualquier cosa, siempre que solo haya tres valores de devolución distintos.Condicional tridireccional en C++ para determinar la equivalencia de signo de dos números
int foo(int x, int y) {
if (x * y > 0) return 1;
if (x * y < 0) return -1;
return 0;
}
Por mi problema específico, los valores están en el rango [-6, 6] y X se garantiza que no sea 0. he encontrado una solución para encontrar si dos números tienen el mismo signo, y lo alteró para obtener la siguiente solución.
return y? (((x^y) >= 0)? 1 : -1) : 0;
Debe haber algunos bitops/comparaciones que dan resultados más rápidos que el uso de la multiplicación, la ramificación, las comparaciones.
no es que uno de los ejemplos que se usa para "supercompilation"? IIRC, es muy diferente en diferentes procesadores, y la razón por la que es un ejemplo común es que el código resultante para i86 es bastante sorprendente. – Steve314