Quería saber cómo se implementan BigInt y otras cosas similares. Traté de verificar el código fuente de JAVA, pero era todo griego y latino para mí. ¿Puede explicarme el algo en palabras? No hay código, por lo que entiendo lo que estoy usando cuando uso algo de la API de JAVA. saludos¿Cómo funcionan las implementaciones de BigNums?
Respuesta
Conceptualmente, de la misma manera que usted hace arbitrariamente el tamaño arithmentic a mano. Tiene algo así como una matriz de valores y algoritmos para las diversas operaciones que funcionan en la matriz.
Supongamos que quiere agregar 100
a 901
. Se empieza con los dos números como matrices:
[0, 1, 0, 0]
[0, 9, 0, 1]
Cuando se agrega, el algoritmo de adición se inicia desde la derecha, toma 0+1
, dando 1
, 0+0
, dando 0
, y - ahora la parte difícil - 9+1
da 10
, pero ahora tenemos que llevarlo, por lo que agregamos 1 a la siguiente columna y ponemos (9+1)%10
en la tercera columna.
Cuando sus números crecen lo suficiente - más que 9999 en este ejemplo - entonces tiene que asignar más espacio de alguna manera.
Esto es, por supuesto, algo simplificado si almacena los números en orden inversa.
Las implementaciones reales usan palabras completas, por lo que el módulo es realmente una gran potencia de dos, pero el concepto es el mismo.
Hay una muy buena sección sobre esto en Knuth.
- 1. Implementaciones de botón AJAX: ¿cómo funcionan?
- 2. ¿Cómo funcionan las cookies?
- 3. ¿Cómo puedo automatizar las implementaciones de Node.js?
- 4. ¿Cómo funcionan las declaraciones preparadas?
- 5. Compare las implementaciones de JSF
- 6. Cómo implementar división larga para números enormes (bignums)
- 7. ¿Cómo funcionan las pasarelas API?
- 8. ¿Cómo funcionan las claves externas?
- 9. Java: cómo funcionan las matrices
- 10. ¿Cómo funcionan las funciones trigonométricas?
- 11. ¿Dónde debería usar las implementaciones de BlockingQueue en lugar de las implementaciones de Simple Queue?
- 12. ¿Cómo funcionan las implementaciones modernas de Comet/Reverse AJAX? ¿Alguna implementación estable de C# WCF o ASP.NET?
- 13. ¿Cómo funcionan las unidades de medida F #?
- 14. ¿Cómo funcionan las bases de datos internamente?
- 15. ¿Cómo funcionan las líneas de caché?
- 16. ¿Cómo funcionan las anotaciones de usuario?
- 17. ¿Cómo funcionan las expresiones de consulta web2py?
- 18. ¿Cómo funcionan las anotaciones de datos?
- 19. ¿Cómo funcionan las superposiciones de Turbo Pascal?
- 20. ¿Cómo funcionan las relaciones simples de SQLAlchemy?
- 21. ¿Cómo funcionan las rutas de artefactos Teamcity?
- 22. ¿Cómo funcionan las sesiones de Spring Security?
- 23. ¿Cómo funcionan las clases de atributos?
- 24. Diferencias entre las implementaciones de JVM
- 25. ¿Funcionan las excepciones singleton?
- 26. ¿Las implementaciones IDisposable.Dispose() deben ser idempotentes?
- 27. Cómo funcionan las sesiones en Codeigniter
- 28. ¿Cómo funcionan las transiciones JQuery Nivo Slider?
- 29. Apache ZooKeeper: cómo funcionan las escrituras
- 30. ¿Cómo funcionan las banderas en C?
muchas gracias :) – shahensha
También hay una sección en Recetas Numéricas (que sigue a Knuth de cerca). La parte difícil es obtener la multiplicación correcta. El algoritmo de la escuela no se escala muy bien, por lo que utiliza trucos (por ejemplo, FFT). Una vez que tenga la multiplicación, puede expresar muchas cosas con ella. –