Autor
|
Tema: no tiene sentido este simple código. (Leído 7,923 veces)
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
¿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
Mensajes: 9
|
El compilador que viene en Code::Blocks el GNU GCC Compiler supongo. 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
|
|
|
En línea
|
APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........ (ES SOLO HUMOR)
|
|
|
engel lex
|
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
Mensajes: 9
|
|
|
|
En línea
|
APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........ (ES SOLO HUMOR)
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
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!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayundeme con este simple codigo
Programación Visual Basic
|
fraktal
|
3
|
1,957
|
13 Octubre 2006, 16:35 pm
por fraktal
|
|
|
Este codigo en C# no funciona (es simple)
.NET (C#, VB.NET, ASP)
|
& eDu &
|
1
|
2,757
|
22 Junio 2008, 23:08 pm
por MANULOMM
|
|
|
Ayuda con este simple codigo !!
PHP
|
TrashAmbishion
|
7
|
3,611
|
7 Mayo 2013, 02:42 am
por #!drvy
|
|
|
No funciona este simple codigo
Programación Visual Basic
|
luis456
|
6
|
5,428
|
21 Septiembre 2013, 08:50 am
por luis456
|
|
|
Ayuda nuevamente con este simple codigo
Programación C/C++
|
spiderboot
|
9
|
4,031
|
13 Mayo 2014, 15:39 pm
por spiderboot
|
|