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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  no tiene sentido este simple código.
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: no tiene sentido este simple código.  (Leído 8,031 veces)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: no tiene sentido este simple código.
« Respuesta #10 en: 26 Enero 2017, 23:07 pm »

¿Qué compilador utilizas y qué versón?

En cualquier caso, si solo es vas a elevear a 2 o a 3, es preferible que pongas x*x o x*x*x. Es más simple, y bueno, evitas trabajar con coma flotante.

Oh y, en tu código, ¿qué muestra si cambias "int a" por "float a"?


En línea

AprendiendoAProgramar

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #11 en: 27 Enero 2017, 03:56 am »


El compilador que viene en Code::Blocks el GNU GCC Compiler supongo. :silbar:


Si, se que es más simple pero solo quería probar esa librería y darle uso por si se me ocurría elevar a la 45 de un numero.

Y cambiando int por float curiosamente si da 25, que raro, no entiendo como es posible jajaja  ;D


En línea

APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #12 en: 27 Enero 2017, 04:05 am »

es error de precisión por el float! XD

mira el enlace que dejé para que veas como está armado el float

vas como mucho poder elevar 2 a la 45... como unsigned int 2^32 es el maximo y con unsigned long int el maximo es 2^64, otros valores, especialmente floats los puedes llegar pero sin precisión
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.
AprendiendoAProgramar

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #13 en: 27 Enero 2017, 21:21 pm »

¿Pero hay alguna forma o compilador para arreglar ese desfase de bits ? :silbar: :silbar: :silbar: :silbar: :silbar:



Muchas gracias por las respuestas,gracias  :D
En línea

APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: no tiene sentido este simple código.
« Respuesta #14 en: 27 Enero 2017, 22:44 pm »

También podría ser la CPU. GCC, por lo menos en mi versión, convierte el float a int con el opcode FISTPL. ¿Usas un ordenador antiguo o algo notable?
Si quieres, puedes probar a ejecutar el mismo programa en otro PC. Lo compilas y pasas el ejecutable al otro pc, a ver qué resultado te da.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #15 en: 28 Enero 2017, 15:03 pm »

Si yo fuese tu utilizaría el tipo de dato que me devuelve pow que, si mal no recuerdo, como en ¿casi? todas las funciones de math.h (cmath) es double.

Si vas a asignar o mezclar variables de distintos tipos en una expresión tienes que tener en cuenta las reglas de promoción. Si a una variable le asignas el valor de otra de menor tamaño no tendrás pérdida de datos: char->int->float->double. Si a una variable le asignas el valor de otra de mayor tamaño tendrás un truncamiento (perdida de datos, sigue la lista anterior en orden inverso).

Lo anterior se traduce en que si a un entero le asignas el valor de una variable de tipo real (float/double) vas a perder datos (en el mejor de los casos perderás decimales), como en este caso, que 24'99999 pasa a ser 24.

Cuando aplicas las reglas de promoción a expresiones (operadores aritméticos/paso de parámetros) lo que pasa es que un operador promociona las variables para que sean del tipo de la de mayor tamaño involucrada en la operación. Por ejemplo int = int + float -> se promociona a float el operando int para ajustar su tamaño  al del otro operando (float)-> int = float + float -> int = float -> perdida de datos. Otro ejemplo: una función con lista de parámetros (lo que sea, double, lo que sea)-> llamada: (lo que sea, int, lo que sea) -> promocionamos el int para que sea del tipo declarado en el prototipo. Si fuese a la inversa, con prototipo declarado como (lo que sea, int, lo que sea) y llamamos con datos (lo que sea, float, lo que sea) habría una perdida de datos al forzar la conversión de float a int.

No se si ha quedado claro o no. Lee sobre el tema y tenlo en cuenta a la hora de escribir cualquier código, así evitarás problemas y errores derivados del truncamiento, que por cierto, como no son errores del lenguaje el código compilará, pero se producirán errores lógicos en tiempo de ejecución,  muy difíciles de localizar en el código.

Por ejemplo imagina que tienes una condición if(Cuadrado(x) == 25) ... En este caso la condición habría sido falsa, pero posiblemente tu al revisar el código hubieses dado por válida la expresión y te habrías vuelto loco intentando encontrar el error en otra parte.

¡Saludos!

(Por si no te ha quedado claro, las reglas de promoción las aplica el compilador al crear el binario, no nosotros. XD)
« Última modificación: 28 Enero 2017, 15:05 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayundeme con este simple codigo
Programación Visual Basic
fraktal 3 1,967 Último mensaje 13 Octubre 2006, 16:35 pm
por fraktal
Este codigo en C# no funciona (es simple)
.NET (C#, VB.NET, ASP)
& eDu & 1 2,768 Último mensaje 22 Junio 2008, 23:08 pm
por MANULOMM
Ayuda con este simple codigo !!
PHP
TrashAmbishion 7 3,650 Último mensaje 7 Mayo 2013, 02:42 am
por #!drvy
No funciona este simple codigo
Programación Visual Basic
luis456 6 5,480 Último mensaje 21 Septiembre 2013, 08:50 am
por luis456
Ayuda nuevamente con este simple codigo
Programación C/C++
spiderboot 9 4,088 Último mensaje 13 Mayo 2014, 15:39 pm
por spiderboot
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines