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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  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 9,912 veces)
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 #10 en: 16 Octubre 2010, 00:36 am »

No exactamente, no depende solo de la arquitectura, también depende del modelo de datos utilizado en la plataforma y del entorno de desarrollo.
Por ejemplo, en la mayoría de Unix,Unix-like de arquitectura 64bits, el requerimiento mínimo de un long es 4 bytes, sin embargo un long y un long long tienen 8 bytes. Por otro lado, en un Windows/NT de arquitectura 64bits, un long tiene 4 bytes y un long long tiene 8.
El requerimiento mínimo de 8 bytes si aplica para los enteros long long u por ejemplo para los punteros, pero no para los enteros long.

Saludos.



En línea

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


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #11 en: 16 Octubre 2010, 14:40 pm »

El bigint no es estandar, si no me equivoco  :-\.

Tengo entendido que si tienes que trabajar con numero muy grandes que superan a los limites de los tipos basicos, se puede trabajar con cadenas ( strings ), y despues "simular" las operaciones matematicas.

Me equivoco? , es mejor usar el bigint, aunque no sea estandar?

Saludos!

WaRc3L


En línea

La verdad no se refleja en un espejo
soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #12 en: 16 Octubre 2010, 20:11 pm »

Efectivamente no es estandar pero a veces es necesario y en absoluto veo que las operaciones que podrías necesitar con números grandes puedan resolverse con strings.

Bueno, poder poder lo que es poder seguramente se podrá (de hecho esas funciones de alguna forma se computan) pero intenta calcular un número de cincuenta dígitos elevado a uno de 100 a base de strings por ejemplo.

No son casos habituales pero tampoco son extremadamente raros. Por ejemplo seguramente si excedes 20! ya estas sobrepasando los tipos comunes. Que la gente habitualmente no anda calculando 50^50 o 50! estoy de acuerdo, pero creo que en diversas actividades es bastante probable encontrarse con ese tipo de problemas.

Un saludo
 ;D
En línea

Callar es asentir ¡No te dejes llevar!
ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: ¿Como se trabaja con big integers en C?
« Respuesta #13 en: 16 Octubre 2010, 20:32 pm »

Citar
Bueno, poder poder lo que es poder seguramente se podrá ...
En efecto, como ejemplo el siguiente programa

Código
  1. /* Reto #18: Calcular el factorial de n, 0<=n<=100 */
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. #define MAX_LON_FACT 2600  /* suficiente para calcular el factorial de 1000 */
  7.  
  8. #define CharADig(c) ((int)((c)-'0'))
  9. #define DigAChar(d) ((char)(d)+'0')
  10.  
  11. void mulenterolargo(int q,char *z)
  12. {
  13.  int temp=0,i,ltemp,lz=strlen(z);
  14.  char stemp[15];
  15.  
  16.  for(i=lz-1;i>=0;i--)
  17.  {
  18.    temp+=CharADig(z[i])*q;
  19.    z[i]=DigAChar(temp%10);
  20.    temp/=10;
  21.  }
  22.  
  23.  if(temp)
  24.  {
  25.    ltemp=sprintf(stemp,"%d",temp);
  26.    memmove(&z[ltemp],&z[0],lz+1);
  27.    memcpy(&z[0],stemp,ltemp);
  28.  }
  29. }
  30.  
  31. const char *factorial(int n,char fact[])
  32. {
  33.  int i;
  34.  strcpy(fact,"1");
  35.  for(i=2;i<=n;i++)
  36.    mulenterolargo(i,fact);
  37.  return fact;
  38. }
  39.  
  40. int main(void)
  41. {
  42.  char fact[MAX_LON_FACT+1];
  43.  int n;
  44.  
  45.  printf("Digite el n£mero: ");
  46.  
  47.  if(scanf("%d",&n)!=1 || n<0 || n>1000)
  48.    return 1;
  49.  
  50.  printf("\n%d! = %s\n\n",n,factorial(n,fact));
  51.  printf("Longitud = %d d¡gitos\n",strlen(fact));
  52.  return 0;
  53. }
  54.  
Saludos!
« Última modificación: 16 Octubre 2010, 21:45 pm por bigfish781 » 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 #14 en: 16 Octubre 2010, 23:30 pm »

Bien, pues tu usa eso si te hace feliz.

Yo usaré gmp que trabaja con esos valores directamente en binario y me hace feliz a mi.

Aparte de que si miras ese código verás o que está incompleto o no funciona. A mi me da igual porque no pienso usarlo je je je pero bueno. Aun suponiendo que funcionara ¿echamos una carrera a ver quien resuelve antes 894689038903^766656565656565 mod 8949083489008989090309

Porque en gmp eso es
Código:
// declaración de variables
mpz_t base,exponente, modulo, resultado;
//Inicializacion
mpz_init(base);
mpz_init(exponente);
mpz_init(modulo);
mpz_init(Resultado);
//inicializacion de valores
mpz_set_str(base,"894689038903");
mpz_set_str(exponente,"766656565656565");
mpz_set_rst("modulo,"8949083489008989090309");
// la operacion
mpz_powm(Resultado,base,exponente,modulo);

 ;D

P.D.
Que no te suene que me rio de ti o algo. Nada mas lejos. Solo tengo interes en la gente que está aprendiendo C que vea las posibilidades de esto para superar los límites naturales de C. Nada mas que eso. Por eso me he extendido en la respuesta.

Un saludo
En línea

Callar es asentir ¡No te dejes llevar!
ace332

Desconectado Desconectado

Mensajes: 66


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

Ok, no te molestes  ;D. Sin duda alguna será mejor usar una biblicoteca de funciones especializada en el manejo de números grandes para hacer el trabajo que estes haciendo.

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 6,217 Ú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 2,633 Ú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,745 Último mensaje 19 Febrero 2011, 16:14 pm
por oxydec
¿Cómo trabaja la gente que estafa mediante la publicidad?
Dudas Generales
DefaultUser 5 5,362 Último mensaje 28 Diciembre 2014, 23:46 pm
por Matisca
¿Cómo trabaja un programador?
Programación General
santibarquero98 1 1,928 Ú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