Si desea obtener tanto precisión arbitraria como código rápido, debe usar una biblioteca especializada que proporcione aritmética de precisión arbitraria en enteros, por ejemplo: GMP.
La biblioteca GNU MP Bignum
Interfaz C ++ General – GNU MP 6.0.0
Aquí hay una buena respuesta de StackOverflow que proporciona el código C ++ / GMP para calcular factoriales grandes: http://stackoverflow.com/a/27319…
- Proyectos teóricos de informática o desarrollo de aplicaciones, ¿qué le sugerirías a los estudiantes de primer año de informática?
- ¿Qué campos \ conceptos matemáticos deben conocer los lingüistas?
- ¿Dónde y cómo se superponen la programación y las matemáticas?
- ¿Cómo nos ayuda la informática a comprender mejor el universo?
- ¿Qué utilizamos en una calculadora científica, microcontrolador o microprocesador?
#include
#include
hecho de mpz_class (unsigned int n)
{
resultado mpz_class (n); // inicializa un número entero de tamaño arbitrario con ‘n’
mientras que (n–> 1) resultado * = n; // calcula el producto con todos los enteros <n
resultado de retorno;
}
int main ()
{
sin signo n = 100000;
mpz_class result = fact (n);
std :: cout << resultado << std :: endl;
}
Puede compilar este código con: g++ -Wall -Wextra Page on fact.cc -lgmpxx -lgmp
Tenga en cuenta que debe tener libgmp instalado en su sistema para compilar este programa.
Si implementa su propio algoritmo de multiplicación, el rendimiento será terriblemente lento en comparación con el muy bien optimizado código GMP (u otra biblioteca de precisión arbitraria). Porque usan algoritmos de última generación + toneladas de optimizaciones + código ASM integrado para aprovechar al máximo su hardware.
También puede usar el paquete de multiprecisión Boost para este propósito:
http://www.boost.org/doc/libs/1_…