2011-09-18 13 views
5

Ok, esto podría sonar como una pregunta extraña, pero es interesante. Estoy codificando iOS y me han dicho que siempre es mejor multiplicar en lugar de dividir los valores, ya que es más rápido.¿La división es más lenta que Multiplicar?

Sé que los procesadores en estos días probablemente hacen que esto no sea un problema, pero mi curiosidad se ha apoderado de mí y me pregunto si alguien podría arrojar algo de luz sobre esto para mí.

SO ..... Mi pregunta es la siguiente -
es:

player.position = ccp(player.contentSize.width/2, winSize.height/2); 

más lento que:

player.position = ccp(player.contentSize.width * 0.5, winSize.height * 0.5); 
+1

Esas cosas no son lo mismo, a menos que 'player.contentSize.width' y' winSize.height' sean números de coma flotante. – icktoofay

+1

Si 'player.contentSize.width' y' winSize.height' son enteros, ¿qué hay de los cambios de bit para la velocidad? –

+2

Dado que es casi seguro que este código no se encuentra en un bucle de rendimiento crítico, casi con seguridad no importa si divide o multiplica. Solo concéntrese en escribir código claro, conciso y sólido y solo preocúpese por el rendimiento cuando realmente lo necesite. –

Respuesta

4

En la mayoría de los procesadores, la división es más lenta que la multiplicación para los mismos tipos de datos. En su ejemplo, su multiplicación es una operación de coma flotante, si width y height son tipos enteros, el resultado puede ser muy diferente y puede depender tanto de su procesador como de su compilador.

Sin embargo la mayoría de los compiladores (ciertamente GCC) traducirán una división por una potencia constante de dos como en su ejemplo, a un cambio a la derecha donde eso sería más eficiente. Eso generalmente sería más rápido que una multiplicación o una división.

7

Sí, la división es por lo general mucho más lenta que la multiplicación.

Sin embargo, al dividir por literales (o cualquier cosa que se pueda determinar como una constante en tiempo de compilación), el compilador normalmente optimizará la división.

+1

Por "literales como ese", se refiere a poderes de 2. Entonces simplemente está cambiando. – UncleO

+1

El compilador también puede optimizar la división de salida en 3, 5 y otros números pequeños. Si el modo de punto flotante se relaja, la división de FP se reemplazará por multiplicación por recíproco. – Mysticial

0

Multiplicación hasta cierto grado se puede hacer en paralelo, si puede usar cualquier uso multiplicación.

Cuestiones relacionadas