Pregunta

que se suponía una vez para hacer un código ensamblador corta para dividir con números que no son potencia de 2. Mi solución fue restando el divisor en ciclos y el número de ciclos fue el resultado real. ¿Hay algo más rápido? ¿Cuál es la forma habitual de resolver esto?

¿Fue útil?

Solución

resta repetida es una manera peligrosamente ineficaz de hacer la división. En el peor caso, una división de N bits puede tener sustracciones O(2**N) !!

@Johannes respuesta tiene un enlace que proporciona algoritmos que funcionan mucho mejor que eso.

Si me pidieron que poner en práctica la división en ensamblador, probablemente haría una búsqueda exhaustiva de una biblioteca existente de rutinas numéricas. Este es el tipo de problema en el que se necesita mucha experiencia para llegar a cerca de código óptimo.

Editar en respuesta al comentario de la OP:

  

Es sólo que estoy haciendo un programa en C ++ y ahora estoy de decidir si la división de utilidad para resolver un problema o hacer alguna otra cosa para hacerlo más rápido.

Le sugiero que sólo tiene que utilizar la división, y dejar que el compilador de C ++ para generar la secuencia de instrucciones más eficiente para lograr el resultado requerido para la plataforma de destino en particular.

Otros consejos

Hay un montón de algoritmos mencionados y detallada sobre Wikipedia .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top