Lo que es más rápido depende mucho del compilador y de la CPU a la que se dirige. En la mayoría de las CPU y todos los compiladores x = (x> = 0)? x: -x; es la manera más rápida de obtener un valor absoluto, pero de hecho, a menudo las funciones estándar ya ofrecen esta solución (por ejemplo, fabs()). Se compila en comparación seguido de instrucción de asignación condicional (CMOV), no en salto condicional. Sin embargo, algunas plataformas carecen de esa instrucción. Aunque, el compilador Intel (pero no Microsoft o GCC) convertiría automáticamente if() en una asignación condicional, e incluso trataría de optimizar ciclos (si es posible).
El código de bifurcación en general es más lento que la asignación condicional, si la CPU usa predicción estadística. if() podría ser más lento en promedio si la operación se repite varias veces y el resultado de la condición cambia constantemente. CPUs como Intel, comenzarían a calcular ambas ramas, y dejarían caer el inválido, en el caso de cuerpos if() grandes o una gran cantidad de ciclos que podrían ser críticos.
sqr() y sqrt() en las CPU Intel modernas son instrucciones incorporadas simples y no son lentas, pero son imprecisas, y cargar registros también llevaría tiempo.
pregunta relacionada: Why is a CPU branch instruction slow?
Lo más probable, profesor quería estudiante para hacer la investigación sobre este asunto, que es semi-provocativa pregunta \ tarea que hacer sólo el bien, si el estudiante aprendería pensar de manera independiente y buscar fuentes adicionales.
¿Dónde está el Módulo? – cdonner
Este es el valor absoluto, no el módulo .... – kquinn
Al menos aquí en Rumania utilizamos el equivalente en inglés para "módulo"/"módulo" para "valor absoluto". Supongo que este fenómeno se extiende a otros idiomas también. –