2009-02-19 15 views
22

¿Cuál es la forma más fácil de manejar números enormes en C? Necesito almacenar valores en el Área 1000^900 ...BigInteger in C?

¿Alguien sabe de una manera fácil de hacer eso? ¡Cualquier ayuda realmente sería apreciada!

+0

1000^900 es * realmente * grande, y podría dar problemas a Big Integers debido a limitaciones de memoria. Probablemente necesite algo que haga cálculos simbólicos para que pueda mantener los valores de 1000^900 enrollados. – jww

Respuesta

31

Uso libgmp:

GMP es una biblioteca libre de precisión arbitraria, que operan en números enteros con signo, números racionales y números de punto flotante. No hay un límite práctico a la precisión excepto los implicados por la memoria disponible en la máquina GMP se ejecuta en ...

Desde la versión 6, GMP se distribuye bajo las dos licencias, GNU LGPL v3 y GNU GPL v2 ...

Las plataformas objetivo principales de GMP son sistemas de tipo Unix, como GNU/Linux, Solaris, HP-UX, Mac OS X/Darwin, BSD, AIX, etc. También se sabe que funciona en Windows tanto en 32 bits como en 64 -bit modo ...

+0

GMP puede manejar números tan grandes como 1000^900? – jww

+1

No lo he probado, pero dice "No existe un límite práctico para la precisión, excepto los implícitos en la memoria disponible". Una estimación rápida es que 1000⁹⁰⁰ <1024⁹⁰⁰ es lo que cabe en menos de 9000 bits. No veo ninguna razón por la cual deba romper GMP. – kmkaplan

10

Hay algunas bibliotecas para ayudarle a hacer esto (matemáticas de precisión arbitraria):

Suponiendo que esto no está relacionado con el trabajo (es decir, lo estás haciendo por diversión o su hobby o simplemente una oportunidad para aprender algo), que codifica una biblioteca de matemáticas de precisión arbitraria es un proyecto relativamente interesante. Pero si necesita confiar plenamente en él y no está interesado en los aspectos prácticos, simplemente use una biblioteca.

5

Hay una serie de bibliotecas para manejar grandes cantidades. ¿Necesitas aritmética de números enteros o coma flotante?

Puede ver el código incorporado en Python para la tarea.

Puede consultar las extensiones de Perl para la tarea.

Puede ver el código en OpenSSL para la tarea.

Puede consultar la biblioteca GNU MP (multi-precisión), tal como lo menciona kmkaplan.

+0

¿Qué ocurre si se supone que no debo usar ninguna biblioteca externa y solo puedo usar GCC? Ahora, para almacenar 'BIGINT' o realizar cálculos sobre ellos, ¿qué debo hacer? – barnes

+2

¿Lees Knuth? Quiero decir, TAOCP - El Arte de la Programación de Computadoras ([Volumen 2, Algoritmos Semi-Numéricos] (http://www.amazon.com/Art-Computer-Programming-Volume-Seminumerical/dp/0201896842); sección 4.3 Múltiple- Se aplica precisión aritmética).O cualquier libro similar que abarque la aritmética de precisión múltiple. –