Autor
|
Tema: ¿Uso mal las funciones de la librería GMP? (Leído 14,266 veces)
|
DickGumshoe
|
¡Muchas gracias! Creía que era esa función la de dividir... La suma no da... Así que he puesto esto: while(mpz_cmp_ui(resultado, 0) >0) {//BUCLE INFINITO suma += mpz_mod_ui(mod, resultado, 10); //suma = suma + el resto de dividir resultado entre 10 mpz_tdiv_q_ui(resultado, resultado, 10); //Dividimos resultado entre 10 printf("%d\n", suma ); //Además de que el bucle es infinito, he comprobado que la suma la hace mal. }
Para ver qué pasaba, y los primeros números los suma bien, pero a partir de 565 sale un número muy grande, números negativos, etc. (no sé por qué salen negativos, cuando "suma" es unsigned long int...)...
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Pues es que unsigned long int , es de 4 bytes de longitud 4*8= 32 bits , o sea que solo puede contener hasta 232=4,294,967,295 , pero eso no tiene nada que ver porque esas cifras no suman tal cantidad de numeros, así que no sé , cuanto debe de dar la suma entonces?
|
|
|
En línea
|
Regístrate en
|
|
|
DickGumshoe
|
El problema es de una página muy conocida de retos de programación, por lo que buscando en Internet acabo de ver que da 1366. No sé si será el resultado correcto...
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Eso me dá a mí , a ti ¿cuanto te dá? ¿Que página es?
|
|
|
En línea
|
Regístrate en
|
|
|
DickGumshoe
|
Qué raro... A mí me da 1620828886. La página es Project Euler.
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
A ver vamos a hacer una cosa , vamos a guardarla en la variable suma pero está ahora vá a ser de tipo mpz_t ahora te paso el codigo a ver que tal , pero me parece rarísimo.Toma aquí tienes , ahora lo que he hecho es que la variable suma es de tipo mpz_t #include <stdio.h> #include <gmp.h> int main() { mpz_t num, resultado, mod,suma; //Variables mpz_inits(resultado,mod,suma,NULL);//Resultado suma y mod inicializado a 0; mpz_init_set_ui(num, 2); //Inicializo num a 2 mpz_pow_ui(resultado, num, 1000); // 2^1000 gmp_printf("Resultado: %Zd\n\n", resultado); //Imprimo 2^1000, y el resultado es correcto while(mpz_cmp_ui(resultado, 0) > 0) {//BUCLE NO INFINITO mpz_add_ui(suma,suma,mpz_mod_ui(mod, resultado, 10)); //suma = suma + el resto de dividir resultado entre 10 //printf("SUMA :%d \n", suma); Probando la suma... mpz_tdiv_q_ui(resultado,resultado, 10);//Realizamos una division entre 10 y no redondeamos, lo que sobra lo truncamos. //mpz_set_ui(resultado, mpz_cdiv_ui(resultado, 10)); Esto está mal , la función mpz_cdiv_ui devuelve el resto de la division!! gmp_printf("Suma: %Zd\n\n", suma); //Además de que el bucle es infinito, he comprobado que la suma la hace mal. //getchar(); } gmp_printf("Suma final: %Zd\n\n", suma); mpz_clears(resultado,num,mod,suma,NULL); //Liberamos memoria return 0; }
Vamos a ver una cosa compila este código y dime lo que te sale también... #include <stdio.h> int main() { printf("El tamano de un unsigned long int en tu maquina es de: %d bytes",sizeof(unsigned long int)); return 0; }
|
|
« Última modificación: 6 Julio 2012, 17:53 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
DickGumshoe
|
Tanto en tu código como en uno que he hecho yo (que ha resultado ser igual que el tuyo), me da 43123298370...
|
|
|
En línea
|
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Pues ni idea la verdad , igual es que mis librerias como las compile para mi ordenador no sirven para el tuyo...
|
|
|
En línea
|
Regístrate en
|
|
|
DickGumshoe
|
Yo creo que sí sirven, porque sino me daría error al compilar, o me daría mal 21000... Veré que puedo hacer.
Gracias por haberme ayudado!
Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Librería de funciones y scripts BATCH Actualizado 26/05/07
« 1 2 »
Scripting
|
ne0x
|
13
|
65,981
|
6 Julio 2011, 02:10 am
por bITEBUG
|
|
|
Ayuda con funcion de libreria de funciones u.u
Scripting
|
FranciskoAsdf
|
0
|
2,433
|
9 Septiembre 2008, 04:15 am
por FranciskoAsdf
|
|
|
Python, funciones o libreria ?
Scripting
|
EvilGoblin
|
2
|
6,643
|
11 Julio 2010, 20:35 pm
por xーいぱ
|
|
|
¿Que funciones puedo agregar a mi libreria?
Programación C/C++
|
megaerikivan
|
2
|
2,186
|
17 Abril 2016, 20:35 pm
por HardForo
|
|
|
Optimizar código, crear libreria de funciones.
PHP
|
raguel
|
3
|
3,042
|
3 Agosto 2016, 03:04 am
por Dacan
|
|