elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Como se trabaja con big integers en C?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como se trabaja con big integers en C?  (Leído 7,969 veces)
soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
¿Como se trabaja con big integers en C?
« en: 14 Octubre 2010, 21:11 pm »

Pues eso.

¿Como defino en C un tipo bigint o similar que admita números grandes? ¿hay alguna librería? ¿como se hace?


En línea

Callar es asentir ¡No te dejes llevar!
Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: ¿Como se trabaja con big integers en C?
« Respuesta #1 en: 14 Octubre 2010, 22:20 pm »

Existe un tipo de dato llamado long int o simplemente long (que ocupa 4 bytes) y, cuando es signado va desde el -2147483648 hasta el 2147483647 y cuando no es signado va desde el 0 hasta el 4294967295.


« Última modificación: 27 Noviembre 2010, 15:22 pm por Horricreu » En línea

soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #2 en: 14 Octubre 2010, 23:07 pm »

Hombre claro que los long son mayores que los int pero eso no son big int. Un big int puede tener 200 dígitos.

Estoy trabajando en unos test de primalidad (miller-rabin) y no tengo problema con números muy pequeños pero con números de dos o tres cifras ya no puedo. Lo correcto sería trabajar con números de mínimo veinte cifras osea que el long no vale ni de coña. Intenta calcular 50^100 o 60! o cualquier cosa asi con el tipo long.

Yo creo que hay alguna librería que se incluye y que tiene funciones para eso pero no se donde encontrarla ni nada. Por eso pregunto.

Un saludo
« Última modificación: 15 Octubre 2010, 00:02 am por soplo » En línea

Callar es asentir ¡No te dejes llevar!
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #3 en: 14 Octubre 2010, 23:13 pm »

En vez de trabajar con enteros, quizá podrías probar con doubles, (o long doubles). No son tipos puramente de enteros, pero su rango de representación abarca números mayores.

Sin embargo, esto te puede acarrear que algunos de tus números no sean representables por la propia naturaleza del formato en coma flotante y tengas problemas de redondeo.
« Última modificación: 14 Octubre 2010, 23:47 pm por Akai » En línea

soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #4 en: 15 Octubre 2010, 00:00 am »

Efectivamente tal como dices no es posible utilizar coma flotante y de hecho aún así habría un límite (mayor pero límite) que lo hace inviable. Podría ocurrir que pudieras calcular 50! y no pudieras 51! por ejemplo. La naturaleza de big int es "cualquier tamaño" y lo que si puede pasar es que según la cpu que tengas la operación pueda llevar mas o menos tiempo.

En google veo que algunos códigos hacen un include "bigint.h" y a partir de ahí ya se puede trabajar con ese tipo de números, pero no consigo información de donde obtenerlo.

Un saludo
En línea

Callar es asentir ¡No te dejes llevar!
WestOn

Desconectado Desconectado

Mensajes: 272


El testamento Maya...


Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #5 en: 15 Octubre 2010, 00:10 am »

Jeje te gusto lo de criptografía :P
¿Probaste este?

Saludos y ya me cuentas como te fue (no puedo probarlo ahora, por eso te lo pregunto).
;)
En línea

En mi cabeza existe una barrera espacio-tiempo de 4cm³. ¿Alguien sabe como eliminarla?.
                                                                                                                                                                                                                            
soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #6 en: 15 Octubre 2010, 00:19 am »

Eso si es lo que busco o al menos lo parece (a falta de pruebas)
 ;D

He mirado eso de gmp.h y creo que la cosa pasa por instalar los paquetes libgmp-ocaml y libgmp3c2 (en debian).

Esto si parece ser lo que buscaba.

Si que me gustó la criptografía. Es una ciencia aparte y un nuevo reto je je je. Igual me ha pasado con Gambas como lenguaje de programación para sustituir a VB y en entornos linux. Disfruto con ello.

Muchas gracias
 ;D

Lh: No hagas doble post, utiliza el botón modificar.

Ya lo he solucionado. Ahora que lo veo no es tna dificil pero ha habido un rato que no enteraba por donde me venían las cosas.

Primero para instalarlo hay que instalar los paquetes libgmp3c2 y libgmp3-devel.

Una vez instalado hay que conocer las funciones que incluye para trabajo con bignum. La documentación de esas funciones está aquí

http://gmplib.org/manual/index.html#Top

Y mas concretamente las funciones correspondientes están aquí
http://gmplib.org/manual/Function-Classes.html#Function-Classes

Y ahora pongo un ejemplo de crear un número grande y hacer una suma con él. Luego se muestra en pantalla.

Código:
# include <gmp.h>

int main(void)
{
   mpz_t x,y,z;

   mpz_init(x);
   mpz_init(y);
   mpz_init(z);
   mpz_set_str(x,"987654321987654321987654327",10);
   mpz_set_str(y,"1",10);
   mpz_add(z,x,y);
   mpz_out_str(stdout,10,z);
   return(0);
}

Primero inicializo x, y y z. Luego asigno a x un valor que especifico que está en base 10. Asigno a y el valor 1 y especifico que está en base 10. Luego sumo x e y y dejo el resultado en z que hasta ese momento valía cero. Por último saco por stdout el valor de z.

Muchas gracias
 ;D

[editado]
Olvidé decir que para compilarlo hay que incluir obligatoriamente la librería gmp o no funcionará.
Es decir pra compilar la anterior aplicación y que funcione habrá que hacerlo así
gcc prueba.c -lgmp -o prueba

[/editado]
« Última modificación: 15 Octubre 2010, 20:17 pm por Littlehorse » En línea

Callar es asentir ¡No te dejes llevar!
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: ¿Como se trabaja con big integers en C?
« Respuesta #7 en: 15 Octubre 2010, 18:18 pm »

Aclaración :

@E.P.I:  Estás describiendo el int ... un long en condiciones normales es de 64 bits, no 32  ..
2^32 = 4,294,967,296 (si no, le sacás un bit para el signo)

Saludos.
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: ¿Como se trabaja con big integers en C?
« Respuesta #8 en: 15 Octubre 2010, 21:10 pm »

Lo que expuso Horricreu es correcto ya que no se refiere al máximo de posibilidades si no al rango comprendido.

y cuando no es signado va desde el 0 hasta el 4294967295.

es perfectamente correcto.
En cuanto a los bytes, el requerimiento mínimo de un long es de 4 bytes, y de ahí para arriba puede variar dependiendo la plataforma y la arquitectura en la que estemos trabajando.
long long en todo caso si requiere como mínimo 64bits, pero esa es otra historia ya que esto no se ha mencionado aquí.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: ¿Como se trabaja con big integers en C?
« Respuesta #9 en: 15 Octubre 2010, 23:54 pm »

Cierto, fail mío, me confundí con el tema de la arquitectura (en 64 bits automáticamente es 8 bytes), cierto que en 32 es 4 ...

Saludos.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
unir integers « 1 2 »
Programación Visual Basic
MinusFour 16 4,851 Último mensaje 26 Mayo 2005, 00:52 am
por ....Gusto....
como hace que un batch me diga con que tipo de red trabaja mi equipo
Scripting
rambalita 0 1,572 Último mensaje 11 Marzo 2010, 20:14 pm
por rambalita
Sobre el funcionamiento de Metasploit (no como usarlo sino como trabaja)
Bugs y Exploits
oxydec 2 4,015 Último mensaje 19 Febrero 2011, 16:14 pm
por oxydec
¿Cómo trabaja la gente que estafa mediante la publicidad?
Dudas Generales
DefaultUser 5 4,601 Último mensaje 28 Diciembre 2014, 23:46 pm
por Matisca
¿Cómo trabaja un programador?
Programación General
santibarquero98 1 1,198 Último mensaje 20 Mayo 2015, 09:02 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines