SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: jubilubi en Lunes 19 de Enero de 2004, 23:13
-
¿Como le puedo hacer para que en un programa acepte numeros muy grandes, aunque esto afecte el resultado final?
Entiendo que existen rangos en los tipos de datos, pero quisiera que me aceptara cualquier clase de numero, desde un 5, pasando por 89.315, hasta 10e-140.
Se que va a ocurrir un error de truncamiento al introducir datos muy grandes, pero no importa, lo que me interesa es que realize las operaciones aunque el resultado sea solamente una aproximación del resultado real. Les agradeceria mucho su ayuda.
-
podrias manejar los numeros guardandolos en notacion cientifica, con un float q sea el numero y un int el exponente
por ejemplo si quieres sumar 2 numeros primero ves si los exponentes son parecidos, si son muy diferentes desprecias el mas chico, y si son parecidos divides el mayor por 10 elevado la diferencia de exponentes y los sumas. y asi haces ese tipo de cosas con las demas operaciones
-
Utiliza double por todos lados. Este tipo es el que te dará el máximo rango posible.
De todas formas, sigue teniendo un límite (enorme, pero lo tiene). Si aun así se te queda pequeño, no te queda más remedio que hacerte tu propio código para tratamiento de todos estos números.
Se bueno.
-
O usar alguna libreria para numeros grandes, hay varias dando Vueltas por la net.
-
Librerias de números gordos que puedes encontrar son:
Para C la LIP, que usa variables verylong.
Para C++ la de LiDIA, que usa variables bigint. Personalmente prefiero mejor esta, a parte que en C++ se hace más llevadero el uso de operadores y demás.
Nos vemos
-
Yo creo q lo mejor es que vos hagas una libreria q maneje numeros grandes.
Yo hace unos años hice una en object pascal para una materia y no era complicado. Solo necesitarias librerias de lista enlazada y saber como hacer una suma y una resta (la multiplicacion y la division son sumas y restas).
Creo q eso seria mejor. Pensa q si usas listas dinamicas podes representar numeros extremadamente gigantes (tan grandes como memoria para alocar nodos).
Salu2!!!!!!!!!!
P.D. : De ultima usa double
-
Implementarlos uno mismo :blink: , ufff, ami me toco implementar una especie de bigint (número en base 2^16) ufff, y aquello era un poco lioso. Aunq sinceramente, una vez currada la suma y la resta, lo demás es ponerte a trabajar.
No sé, pero antes de tirarle horas a programar, yo probaría con alguna librería aunque como dice el dicho "El buen artesano se fabrica :comp: sus propias herramientas" :D .
Nos vemos