¿Hay algún algoritmo genial con operaciones de bits?¿Cómo encuentran las computadoras el módulo?
Respuesta
A menudo, las operaciones de módulo y dividir en un procesador son la misma cosa. Por ejemplo, consulte http://jsimlo.sk/docs/cpu/index.php/div.html. Esta es la implementación de la instrucción dividir en procesadores Intel.
La mayoría de las veces, el módulo se calcula dividiendo los dos números. El cociente se almacena en un registro, y el resto se almacena en el otro registro. Usted iría después del resto.
x mod y = x - y * (x/y)
donde (x/y) es una división entera.
Aparte del método obvio usando DIV
y IDIV
(para x86) como se mencionó anteriormente, el resultado de cualquier número modulo'd por una potencia de dos se puede calcular tomando el bit a bit y: x mod y
donde y es pow2 es el igual que x AND (y - 1)
. La mayoría de los compiladores realizan esto cuando es posible, ya que la división es mucho más costosa que operaciones bit a bit
Si el divisor es conocido de antemano (por ejemplo, para código producido por un compilador C, esta es una constante conocida en tiempo de compilación) a partir del cual el módulo se puede obtener fácilmente) a veces se puede implementar con una multiplicación y un cambio. Consulte this article para obtener más información (advertencia: esto no es una lectura ligera).
En muchos procesadores, la multiplicación de enteros es mucho más rápida que la división de enteros; algunos procesadores ni siquiera tienen un código de operación de división entera (multiplicación en n -los valores de bits se pueden optimizar en un circuito de profundidad O (log n), mientras que no existe un método conocido para optimizar un circuito de división por debajo de una profundidad de O (n)).
- 1. ¿Cómo las aplicaciones P2P encuentran otros nodos?
- 2. ¿Cómo se representan las fracciones en las computadoras?
- 3. Listar todas las computadoras en el directorio activo
- 4. ¿Dónde se encuentran las mesas en Mnesia?
- 5. ¿Cómo se encuentran las interfaces de un COM sin typelib?
- 6. ¿Cómo se encuentran y se reemplazan las llaves {} en vim?
- 7. ¿Cómo procesan las computadoras los datos de audio?
- 8. ¿Cómo se encuentran las etiquetas que no coinciden en HTML?
- 9. ¿Cómo se encuentran todos los módulos y clases dentro de un módulo, recursivamente?
- 10. ¿Cómo encuentran las funciones vararg el número de argumentos en el código máquina?
- 11. ¿Cómo realizo el desarrollo de Android desde múltiples computadoras?
- 12. ¿Cómo es que las clases en las subcarpetas de mi carpeta App_Code no se encuentran correctamente?
- 13. ¿Cómo se fusionan las actualizaciones del módulo?
- 14. ¿Cómo funciona un programador en varias computadoras?
- 15. ¿Cómo puedo enviar cadenas entre dos computadoras?
- 16. No se encuentran las funciones JSTL en JSF
- 17. ¿Por qué los nosetest no encuentran nada?
- 18. WIN32_Processor :: Is ProcessorId Único para todas las computadoras
- 19. CakePHP encuentran con MAX
- 20. ¿Cómo se usa Git con varias computadoras?
- 21. Enchufes entre computadoras
- 22. ¿Cómo detectar computadoras Apple usando user-agent?
- 23. Enviando mensajes entre computadoras
- 24. ¿Cuáles son las principales preguntas/soluciones que se encuentran en el diseño impulsado por el dominio?
- 25. Acelerómetro API para computadoras portátiles
- 26. Heroku: ¿implementación desde múltiples computadoras?
- 27. encuentran varias líneas en Notepad ++
- 28. Conecte 2 computadoras con .NET
- 29. Obtener computadoras en un grupo de trabajo
- 30. ¿Clúster de computadoras para alquilar?
teniendo en cuenta el ensamblaje, parece que quieres saber esto a un nivel muy bajo, no es algo para 'x MOD y' como 'restar repetidamente y de x hasta que el resultado sea menor que y' ¿no? Me recuerda escribir rutinas mul/div en un curso de montaje y me sorprendió cuánto tiempo necesitaron ser –
Correcto, me pregunto si hay algún modo inteligente de bajo nivel que se haga en un tiempo mejor que O (n). – Nate
No estoy seguro de qué hace el hardware, pero en la mayoría de los conjuntos de instrucciones 'modulus' y' division' se hacen usando la misma instrucción. La instrucción de división se implementa de modo que el cociente se enviará a un registro y el resto simultáneamente a un segundo registro. – aroth