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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Libreria Math de C fuera del Dev-C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Libreria Math de C fuera del Dev-C++  (Leído 9,135 veces)
Saikilito

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Libreria Math de C fuera del Dev-C++
« en: 26 Junio 2017, 00:07 am »

Hola! buenas tardes a todos, para empezar quiero decir que es primera ves que posteo en este foro y pues la verdad es que soy muy muy muy muy nuevo en esto de aprender a programar pero estoy bastante interesado.

Mi pregunta es, estaba viendo unos tutoriales y en una parte el sujero uso una funcion que me parecio bastante útil.

Se trataba de la la función pow(x,y) de la librería math.h

Lo que hace esta funcion es (en este caso) elevar la variable x a la potencia y

El problema que se dio es que yo uso sublimetext3 y uso el prompt de windows para compilar con minGW, probe con pow(10,2) y me dio como resultado 99, luego probe con varios numeros y la verdad es que algunos me daban bien pero otros por el contrario me daban un numero menos tal como el 10**2=99 cuando deberia ser 100

Entonces le comente a un amigo (el usa dev-c++) y le funciono de maravillas, entonces probe con bajarme ese IDE y abri el mismo archivo desde ahi y la funcion se ejecutaba a la perfección. Pero como a mi no me gusta Dev-c++ pensé en descargarme el mismo compilador así que me baje TDM-GCC que es el mismo compilador que vi que usaba el Dev-c cambie lo parámetros necesarios, comprobé su funcionamiento y sorpresa! cuando usaba la funcion pow me volvia a dar el mismo error  >:D

Por ultimo entre en las carpetas del dev-c busque en el include la libreria math.h y haciendo los respaldos convenientes sobre escribí esa libreria dentro de la carpeta del TDM-GCC y ps mate la librería pero con el respaldo la restaure aunque con el mismo error del 10**2=99

Alguien sabe que puedo hacer ? o el porque me pasa esto?
De antemano muchas gracias :)


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #1 en: 26 Junio 2017, 00:09 am »

es un asunto de precisión de nuestro flotante... para ver tu código...


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Saikilito

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #2 en: 27 Junio 2017, 00:05 am »

Aquí lo dejo, solo me da correcto con el dev-c++

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main( void ) {
  5. int x,y,z;
  6.  
  7. x = 10;
  8. y= 2;
  9. z = pow(x,y);
  10.  
  11. printf("10 al cuadrado es igual a %i \n", z );
  12.  
  13.  
  14. return 0; }
  15.  

Y aqui unos captures  ;D




fotos gif


· No hacer doble post
>aquí las reglas del foro
-Engel Lex
« Última modificación: 27 Junio 2017, 00:17 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #3 en: 27 Junio 2017, 00:16 am »

a mi me da bien, aunque usualmente es un problema relacionado a coma flotante, pow es una función que retorna un valor de tipo double y lo estás asignando en un int, por la forma en que el compilador trabaja la conversión pierde precisión...

declara z como double
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #4 en: 27 Junio 2017, 01:39 am »

Usa algo así para depurar. Convierte las variables a double a ver que te da el programa cuando falla.
Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define obj2bin(obj) execobj2bin(&#38;#obj, sizeof(#obj))
  5.  
  6. static void execobj2bin(void *obj, size_t size) {
  7.    for(int i = size - 1; i >= 0; --i)
  8.        for(int j = 7; j >= 0; --j)
  9.            printf("%d", ((char*)obj)[i]>>j & 1);
  10. }
  11.  
  12. int main( void ) {
  13.    int x = 10;
  14.    int y = 2;
  15.    int z = pow(x,y);
  16.  
  17.    printf("10 al cuadrado es igual a %i \n", z );
  18.    printf("x = "); obj2bin(x); puts("");
  19.    printf("y = "); obj2bin(y); puts("");
  20.    printf("z = "); obj2bin(z); puts("");
  21.  
  22.    getchar();
  23. }
« Última modificación: 1 Julio 2017, 23:37 pm por MAFUS » En línea

Saikilito

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #5 en: 27 Junio 2017, 03:22 am »

a mi me da bien, aunque usualmente es un problema relacionado a coma flotante, pow es una función que retorna un valor de tipo double y lo estás asignando en un int, por la forma en que el compilador trabaja la conversión pierde precisión...

declara z como double

 :o :o :o :o :o :o

Engel tenias toda la razon, declare Z como double y ahora funciona perfectamente

Muchísimas gracias!!   :rolleyes:


Usa algo así para depurar. Convierte las variables a double a ver que te da el programa cuando falla.
Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define obj2bin(obj) execobj2bin(&#38;#obj, sizeof(#obj))
  5.  
  6. static void execobj2bin(void *obj, size_t size) {
  7.    for(int i = size - 1; i >= 0; --i)
  8.        for(int j = 7; j >= 0; --j)
  9.            printf("%d", ((char*)obj)[i]>>j & 1);
  10. }
  11.  
  12. int main( void ) {
  13.    int x = 10;
  14.    int y = 2;
  15.    int z = pow(x,y);
  16.  
  17.    printf("10 al cuadrado es igual a %i \n", z );
  18.    printf("x = "); obj2bin(x); puts("");
  19.    printf("y = "); obj2bin(y); puts("");
  20.    printf("z = "); obj2bin(z); puts("");
  21.  
  22.    getchar();
  23. }

Mafus la verdad es que soy tan novato con esto que no entiendo tu codigo  :huh:
Pero lo voy a probar e investigare hasta entenderlo muchas gracias por tu ayuda!   ;D

En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #6 en: 27 Junio 2017, 03:34 am »

Saikilito no intentes entenderlo XD

no vale mentira... si estás empezando carecerá de pie y cabeza, avanza un poco y lo revisas...

el define una directiva de preprocesador para escribir menos

Código
  1. #define obj2bin(obj) execobj2bin(&#38;#38;#obj, sizeof(#obj))

lo que hace eso, es convertir todas las apariciones del codigo de

Código
  1. obj2bin(una_variable)

en

Código
  1. execobj2bin(*una_variable, sizeof(una_variable))

luego usa la función para recorrer el largo en bytes (que lo obtuvo de sizeof)
Código
  1. for(int i = size - 1; i >= 0; --i)

y luego recorrer los 8 bit de cada byte
Código
  1. for(int j = 7; j >= 0; --j)

mostrando si es 0 o 1
Código
  1. printf("%d", ((char*)obj)[i]>>j & 1); //si, así se ve más complicado que explicado


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #7 en: 27 Junio 2017, 07:45 am »

Como dice engel lex no intentes entenderlo, por ahora, úsalo como una caja negra. Algo como printf que simplemente usas.
En línea

Saikilito

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #8 en: 1 Julio 2017, 21:49 pm »

Saikilito no intentes entenderlo XD

no vale mentira... si estás empezando carecerá de pie y cabeza, avanza un poco y lo revisas...

el define una directiva de preprocesador para escribir menos

Código
  1. #define obj2bin(obj) execobj2bin(&#38;#38;#obj, sizeof(#obj))

lo que hace eso, es convertir todas las apariciones del codigo de

Código
  1. obj2bin(una_variable)

en

Código
  1. execobj2bin(*una_variable, sizeof(una_variable))

luego usa la función para recorrer el largo en bytes (que lo obtuvo de sizeof)
Código
  1. for(int i = size - 1; i >= 0; --i)

y luego recorrer los 8 bit de cada byte
Código
  1. for(int j = 7; j >= 0; --j)

mostrando si es 0 o 1
Código
  1. printf("%d", ((char*)obj)[i]>>j & 1); //si, así se ve más complicado que explicado






Como dice engel lex no intentes entenderlo, por ahora, úsalo como una caja negra. Algo como printf que simplemente usas.


Chicos disculpen la ausencia estoy un poco atareado con la universidad, aun así sigo aprendiendo poco a poco algunas cosas.  ;)

Ahora, pues xD aun con la explicación sigue siendo bastante confuzo jaja asi que supongo que ya llegara mi momento de entenderlo xD! pero tengo el archivo bien respaldadito en la nube para releerlo al 100%  cuando ya sea capas. Muchas gracias por eso.

Ahora lo otros ps si estoy bastante apenado la verdad es que cuando probé el código no me corrió :/ no se si es que tenga un problema con mi compilador o es que tengo mis entendederas bien cerrada pero no me corre mas bien me da un error, así que mas difícil aun se me hace comprender como es eso de usarlo tipo depurador xD! les dejo un capture, y pues de verdad muchísimas gracias por tomarse el tiempo de enseñarme.

[/url]
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Libreria Math de C fuera del Dev-C++
« Respuesta #9 en: 1 Julio 2017, 23:38 pm »

El código del define es este
#define obj2bin(obj) execobj2bin(&#obj, sizeof(#obj))
Lo que pasa es que, por alguna razón, la etiqueta code suma caracteres de más.
« Última modificación: 2 Julio 2017, 00:06 am por MAFUS » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Libreria math.php « 1 2 »
PHP
Erik# 15 9,940 Último mensaje 25 Julio 2009, 22:01 pm
por SnakeDrak
Ecuaciones con MS ecuation u OOO math
.NET (C#, VB.NET, ASP)
carlitos_jajajajaja 2 2,199 Último mensaje 12 Julio 2010, 06:09 am
por carlitos_jajajajaja
Libreria math.h
Programación C/C++
juancaa 3 4,064 Último mensaje 17 Marzo 2012, 21:39 pm
por theluigy13etv
Logaritmo sin librería Math.t « 1 2 »
Programación C/C++
norris 14 10,396 Último mensaje 3 Abril 2013, 11:13 am
por do-while
raiz cubica sin libreria math
Java
ericklopez 3 3,677 Último mensaje 30 Marzo 2020, 04:07 am
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines