tabla - tipos de datos en c++ pdf
¿Hay alguna implementación sólida de enteros grandes en C? (6)
Gnu MP proporciona una biblioteca bignum.
Estoy trabajando en un proyecto en el que necesito procesar números enteros grandes (como 3 ^ 361) con la precisión absoluta y la mayor velocidad posible. C es el idioma más rápido con el que estoy familiarizado, así que estoy tratando de codificar mi solución en ese idioma.
El problema es que no he podido encontrar una buena implementación de ningún tipo de datos para representar enteros ilimitados en C que no sean el código fuente de Python. Me está llevando tiempo revisar el código y determinar lo que necesito.
Prefiero usar el código probado de otra persona con un conjunto completo de funcionalidades (suma, resta, multiplicación, división, modulación, exponenciación, comprobación de igualdad ... incluso la operación a nivel de bits sería dulce) que pasar las semanas que me llevaría incluso empiezo a obtener mi propia versión a la par. Si bien sería una gran experiencia de aprendizaje, no es el foco de mi problema, y prefiero llegar a la parte que me interesa :)
Si desea el estándar ANSI C, obtenga el código en las interfaces e implementaciones C de Dave Hanson. Muy claro y bien diseñado.
Si las extensiones gcc y gcc son correctas, entonces como otros han señalado, Gnu Multiprecision Library (GMP) está bien pensado y ampliamente utilizado.
Un par de personas ya han mencionado GMP. Solo agregaría que al menos la última vez que miré, estaba bastante restringido para trabajar con gcc.
Si desea utilizar otros compiladores, son pares que podría considerar son NTL y MIRACL . Probé MIRACL un poco, y parece funcionar razonablemente bien. He usado NTL un poco más, y aunque los enteros grandes son más bien secundarios, todavía los hace bastante bien. No pretende ser tan rápido como GMP (y, de hecho, puede usar GMP para hacer operaciones básicas), pero cuando hice un benchmarking mínimo entre los dos, no he encontrado muchas diferencias significativas (aunque eso fue hace mucho tiempo que dudo que ya sea válido).
Uso MAPM, que es una biblioteca portátil de precisión arbitraria (entero y coma flotante).
libtommath, de libtomcrypt, es probablemente el más pequeño, el más simple y el más rápido. (Es curioso cómo esos 3 superlativos casi siempre se unen ...) Si no puede encontrar un flujo ascendente, puede obtener la fuente del árbol fuente dropbear ssh.
La biblioteca OpenSSL también proporciona una implementación sólida de BigNum ( <openssl/bn.h>
).