7

Vi un video hoy y el hombre en el video acaba de escribir esto para entender si un número es par o no:hacer algo de una manera inusual pero eficiente

number/2*2 == number ? true : false ; 

lo probé cuando llegué a casa y en comparación con

number % 2 == 0 ? true : false ; 

el segundo fue más rápido que i cambiado el primero como:

number>>1<<1 == number ? true : false; 

este t Ie cambiando el número una vez hacia la derecha y una vez hacia la izquierda trabajó más rápido: D La diferencia de rendimiento no es enorme solo 0-1 segundo para identificar todos los números entre 1 y 1000000000 pero me gustó mucho y quería escuchar tales trucos de ti.

¿Qué más? =)

y una otra idea de Russell Borogove =)

(number&1) == 0; 

Resultados:

tiempo transcurrido con y operación: 00: 00: 07,0504033
tiempo transcurrido con el cambio de la operación: 00: 00: 06.4653698
Tiempo transcurrido con operación Mod: 00: 00: 06.8323908

Sorprendentemente, el cambio dos veces funciona más rápido que una operación única en mi computadora.

+2

¿Qué pasa con 'par = (número & 1) == 0'? –

Respuesta

7

MIT realmente mantiene una lista de tales cosas, HAKMEM, que se puede encontrar en http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html. La mayoría de los relacionados con la programación están escritos en lenguaje ensamblador, pero entiendo que algunos de ellos se han traducido a C en http://graphics.stanford.edu/~seander/bithacks.html.

Ahora para una conferencia: Estos trucos sucios pueden ser más rápidos, pero toman demasiado tiempo para comprender.

La mayoría de la informática no es tan crítica para el rendimiento que se necesitan trucos como este. En el caso par, number % 2 == 0 es mucho más claro y legible que number/2*2 == number o number>>1<<1 == number. Dicho esto, en las aplicaciones normales siempre debe usar la opción más simple y más estándar, ya que hará que su código sea más fácil de comprender y mantener.

Sin embargo, hay casos de uso para trucos como este. Especialmente en informática matemática o científica a gran escala y gráficos por computadora, trucos como estos pueden salvarle la vida. Un excelente ejemplo de esto es John Carmack's "magic inverse square root" en Quake 3.

+0

Algunos de estos trucos son bastante útiles cuando se está programando ensamblaje para microcontroladores cuando se trabaja con un conjunto de instrucciones limitado y con solo muchos ciclos. En los lenguajes de nivel superior, sin embargo, generalmente no son necesarios ya que los compiladores generalmente hacen un buen trabajo optimizándolos. –

+0

@Insilico: absolutamente, aunque rara vez son necesarios en la programación convencional. –

+3

+1 para la raíz cuadrada mágica q3 :) –

1

El libro Hacker's Delight tiene 300 páginas de nada más que cosas como esta. No es barato, pero es un poco la Biblia de twiddler.

Cuestiones relacionadas