Estoy escribiendo una aplicación que implica aritmética con números enormes, con muchos dígitos. Anteriormente escribí una clase que simplifica el manejo de grandes números definiéndolos como cadenas y luego usando funciones lentas de aritmética. ¿Es esta la mejor manera de hacerlo? Si no, ¿cómo debería abordar este problema? ¿C tiene algo incorporado en tales situaciones?C#: ¿Cómo debo manejar la aritmética con números enormes?
Respuesta
.NET 4 tendrá esto incorporado a través del tipo BigInteger. Se dice que está muy bien ajustado y debería funcionar muy bien.
Para 3.5 y anteriores, puede obtener una implementación de BigInteger de las fuentes Dynamic Language Runtime. (Consulte, por ejemplo, http://dlr.codeplex.com/sourcecontrol/changeset/view/40021?projectName=dlr#694008 y profundice en Src/Runtime/Microsoft.Dynamic/Math.) No sé si esto se ha ajustado tanto como el tipo .NET 4 BigInteger, pero aún así debería ser más eficiente que su versión de cadena porque representa internamente los números grandes usando tipos integrales y realiza aritmética usando operaciones enteras.
Si puede hacerlo en .NET 4, System.Numeric.BigInteger puede ayudar. Si está en una versión anterior de .NET, IntX lo ayudará.
Vea también este this SO question en enteros grandes en C#.
La biblioteca GNU MP bignum es una de las más rápidas. hay un .NET wrapper para él http://gnumpnet.codeplex.com/
Aquí hay otro bignum library para .NET con la fuente.
Gran clase de enteros que he utilizado muchas veces para proyectos de criptografía (donde se necesitan números extremadamente grandes). Funciona genial.
En la versión dotnet por encima de 4,0, System.Numerics.BigInteger
le ayudará a este problema.
si le da error de referencia de montaje usando la sintaxis anterior, a continuación, añadir referencia utilizando
http://www.dllme.com/dll/files/system_numerics_dll.html.
Espero que esto te ayude ...!
Esto ya se ha señalado en la respuesta aceptada. –
- 1. ¿Cómo manejan los lenguajes de programación la aritmética de números enormes
- 2. Aritmética con números de iglesia
- 3. La mejor manera de manejar cadenas enormes en C#
- 4. ¿Cómo debo manejar la autenticación con Nancy?
- 5. ¿Manejar números grandes en C++?
- 6. Agregar números de 64 bits con aritmética de 32 bits
- 7. Objective-C Integer Aritmética
- 8. Aritmética rápida de números complejos en Clojure
- 9. C# Guardando imágenes enormes
- 10. Cómo implementar división larga para números enormes (bignums)
- 11. aritmética de números complejos en Tcl?
- 12. ¿Cómo debo manejar las excepciones en esta función C#?
- 13. ¿Cómo debo manejar las rutas de Windows/Linux en C#
- 14. ¿Cómo manejar los números de forma genérica?
- 15. excepción aritmética en C#
- 16. C puntero aritmética
- 17. Biblioteca/estructura de datos para manejar datos enormes
- 18. Procesando archivos enormes en C#
- 19. ¿Cómo debo manejar cadenas Interning en deserialización?
- 20. Resultados extraños de la aritmética de módulo con números negativos y denominadores sin signo
- 21. C++ aritmética si operador
- 22. ¿Implementando la aritmética en genéricos?
- 23. ¿Ejecutables compilados de C++ ENORMES?
- 24. ¿Cómo debo manejar el decimal en SQLalchemy & SQLite?
- 25. Aritmética de punteros en C
- 26. Comparación de archivos enormes usando C++
- 27. ¿Debo citar números en SQL?
- 28. Algoritmo para la aritmética binaria en Java
- 29. ¿La mejor manera de hacer aritmética binaria en C?
- 30. Cómo codificar una solución para manejar números grandes?
Int64 no será suficiente? ¿Podría dar un ejemplo de una acción aritmética que le gustaría realizar? – Zyphrax
¿Será System.Decimal lo suficientemente grande para usted? El valor más grande que se puede representar con él es 79,228,162,514,264,337,593,543,950,335. – jjxtra
"Humongous" no es realmente una descripción útil. ¿Estamos hablando de números con veinte dígitos, mil dígitos, un millón de dígitos, mil millones de dígitos o más de mil millones de dígitos? La respuesta a tu pregunta será diferente para cada uno. –