Autor
|
Tema: Libreria Math de C fuera del Dev-C++ (Leído 10,003 veces)
|
Saikilito
Desconectado
Mensajes: 10
|
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 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
|
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
Mensajes: 10
|
Aquí lo dejo, solo me da correcto con el dev-c++ #include <stdio.h> #include <math.h> int main( void ) { int x,y,z; x = 10; y= 2; printf("10 al cuadrado es igual a %i \n", z ); return 0; }
Y aqui unos captures 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
|
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
Mensajes: 1.603
|
Usa algo así para depurar. Convierte las variables a double a ver que te da el programa cuando falla. #include <stdio.h> #include <math.h> #define obj2bin(obj) execobj2bin(&#obj, sizeof(#obj)) static void execobj2bin(void *obj, size_t size) { for(int i = size - 1; i >= 0; --i) for(int j = 7; j >= 0; --j) printf("%d", ((char*)obj )[i ]>>j & 1); } int main( void ) { int x = 10; int y = 2; printf("10 al cuadrado es igual a %i \n", z ); }
|
|
« Última modificación: 1 Julio 2017, 23:37 pm por MAFUS »
|
En línea
|
|
|
|
Saikilito
Desconectado
Mensajes: 10
|
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
Engel tenias toda la razon, declare Z como double y ahora funciona perfectamente Muchísimas gracias!! Usa algo así para depurar. Convierte las variables a double a ver que te da el programa cuando falla. #include <stdio.h> #include <math.h> #define obj2bin(obj) execobj2bin(&#obj, sizeof(#obj)) static void execobj2bin(void *obj, size_t size) { for(int i = size - 1; i >= 0; --i) for(int j = 7; j >= 0; --j) printf("%d", ((char*)obj )[i ]>>j & 1); } int main( void ) { int x = 10; int y = 2; printf("10 al cuadrado es igual a %i \n", z ); }
Mafus la verdad es que soy tan novato con esto que no entiendo tu codigo Pero lo voy a probar e investigare hasta entenderlo muchas gracias por tu ayuda!
|
|
|
En línea
|
|
|
|
engel lex
|
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 #define obj2bin(obj) execobj2bin(&#38;#obj, sizeof(#obj))
lo que hace eso, es convertir todas las apariciones del codigo de obj2bin(una_variable)
en execobj2bin(*una_variable, sizeof(una_variable))
luego usa la función para recorrer el largo en bytes (que lo obtuvo de sizeof) for(int i = size - 1; i >= 0; --i)
y luego recorrer los 8 bit de cada byte for(int j = 7; j >= 0; --j)
mostrando si es 0 o 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
Mensajes: 1.603
|
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
Mensajes: 10
|
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 #define obj2bin(obj) execobj2bin(&#38;#obj, sizeof(#obj))
lo que hace eso, es convertir todas las apariciones del codigo de obj2bin(una_variable)
en execobj2bin(*una_variable, sizeof(una_variable))
luego usa la función para recorrer el largo en bytes (que lo obtuvo de sizeof) for(int i = size - 1; i >= 0; --i)
y luego recorrer los 8 bit de cada byte for(int j = 7; j >= 0; --j)
mostrando si es 0 o 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
Mensajes: 1.603
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Libreria math.php
« 1 2 »
PHP
|
Erik#
|
15
|
10,707
|
25 Julio 2009, 22:01 pm
por SnakeDrak
|
|
|
Ecuaciones con MS ecuation u OOO math
.NET (C#, VB.NET, ASP)
|
carlitos_jajajajaja
|
2
|
2,417
|
12 Julio 2010, 06:09 am
por carlitos_jajajajaja
|
|
|
Libreria math.h
Programación C/C++
|
juancaa
|
3
|
4,362
|
17 Marzo 2012, 21:39 pm
por theluigy13etv
|
|
|
Logaritmo sin librería Math.t
« 1 2 »
Programación C/C++
|
norris
|
14
|
11,216
|
3 Abril 2013, 11:13 am
por do-while
|
|
|
raiz cubica sin libreria math
Java
|
ericklopez
|
3
|
4,188
|
30 Marzo 2020, 04:07 am
por CalgaryCorpus
|
|