Autor
|
Tema: Problema al elevar a 1/2 (Leído 8,000 veces)
|
DickGumshoe
|
Hola. Estoy haciendo un programa en C++ en el que introduces la longitud de dos catetos y te calcula la hipotenusa. Lo tengo terminado, lo único que, como todos sabemos 1/2 es 0.5. Pues bien, si pongo lo siguiente: // Dada la longitud de dos catetos calcular la hipotenusa
#include<stdio.h> #include<stdlib.h> #include<math.h>
int main (void){ float c1,c2,h; printf("Introduzca el valor de un cateto"); scanf("%f",&c1); printf("Introduzca el valor del otro cateto"); scanf("%f",&c2); h= pow (c1*c1+c2*c2,1/2); printf("El valor de la hipotenusa es %f",h); system("pause"); }
Ahí me calcula mal la hipotenusa. Sin embargo, si en la fórmula lo elevo a 0.5; sí me la calcula bien, cuando 1/2=0.5 // Dada la longitud de dos catetos calcular la hipotenusa
#include<stdio.h> #include<stdlib.h> #include<math.h>
int main (void){ float c1,c2,h; printf("Introduzca el valor de un cateto"); scanf("%f",&c1); printf("Introduzca el valor del otro cateto"); scanf("%f",&c2); h= pow (c1*c1+c2*c2,0.5); printf("El valor de la hipotenusa es %f",h); system("pause"); }
Muchas gracias.
|
|
|
En línea
|
|
|
|
pucheto
Desconectado
Mensajes: 215
|
Tal vez haga division entera, entonces 1 / 2 no da 0.5 (en division entera da 0). La otra posibilidad es que te calcule la division, de 0.5, y pase a entero, pudiendo dar 0 como 1, depende de como este configurado todo.
|
|
|
En línea
|
|
|
|
DickGumshoe
|
Tal vez haga division entera, entonces 1 / 2 no da 0.5 (en division entera da 0). La otra posibilidad es que te calcule la division, de 0.5, y pase a entero, pudiendo dar 0 como 1, depende de como este configurado todo.
Cierto, he puesto el ejemplo de poner que ambos catetos son 2, y me ha dado 1, cosa que si lo elevamos a 0, da 1. Entonces, ¿qué podría hacer para que al elevarlo a 1/2 de lo que debe dar? Aunque al elevarlo a 0.5 ya me de bien el resultado de la hipotenusa, solo es por curiosidad... Muchas gracias ^^
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
Existe sqrt() en math.h para hacer raices cuadradas.
|
|
|
En línea
|
|
|
|
тαптяα
Desconectado
Mensajes: 1.151
Sic utere tuo ut alienum non laeda
|
Existe sqrt() en math.h para hacer raices cuadradas.
Es lo mismo. De hecho, creo que es más rápido pow(), aunque no puedo ponerte donde lei eso. Cierto, he puesto el ejemplo de poner que ambos catetos son 2, y me ha dado 1, cosa que si lo elevamos a 0, da 1.
Entonces, ¿qué podría hacer para que al elevarlo a 1/2 de lo que debe dar? Aunque al elevarlo a 0.5 ya me de bien el resultado de la hipotenusa, solo es por curiosidad...
Muchas gracias ^^
Intenta a hacer esa misma division, justo una línea de ejecución antes, y haciendo la operación con float..
|
|
|
En línea
|
|
|
|
DickGumshoe
|
Es lo mismo. De hecho, creo que es más rápido pow(), aunque no puedo ponerte donde lei eso. Intenta a hacer esa misma division, justo una línea de ejecución antes, y haciendo la operación con float..
Muchas gracias a todos. ¿Qué tendría que poner para hacer eso? Estoy iniciándome en C++, y no tengo muchos conocimientos...
|
|
|
En línea
|
|
|
|
naderST
|
En vez de usar 1/2 usa 0.5 y ya o (float)1/2
EDIT: Tu código es puro C no tiene nada de C++
|
|
« Última modificación: 30 Octubre 2011, 15:18 pm por naderST »
|
En línea
|
|
|
|
DickGumshoe
|
En vez de usar 1/2 usa 0.5 y ya o (float)1/2
Ah, muchísimas gracias; ya me sale bien el resultado poniendo (float)1/2 ^^ Bueno, problema resuelto. Gracias a todos.
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! Cuando el operador / ve que sus dos valores son enteros, realiza la operacion entre enteros (te devolvera el cociente de la division euclidea), si quieres que realice la division entre float, alguno de sus operandos debe ser de ese tipo, lo que consigues mediante cast, o si el numero es una constante, añadiendo un punto justo despues del numero. Las siguientes operaciones son equivalentes: 1 / 2 = 0 ( 1 = 2 * 0 + 1, por eso el resultado es cero)
((float) 1) / 2 = 0.5
1 / ((float)2) = 0.5;
1. / 2 = 0.5
1 / 2. = 0.5
1. / 2. = 0.5
Lo mismo sucede en el resto de operaciones y expresiones, los valores se convierten al tipo de dato capaz de almacenar cualquiera de los valores que aparecen en la expresion. Asi, al haber un valor float en las anteriores operaciones, el otro se convierte automaticamente a float para poder realizar la division. Si en una expresion mezclas int, char y float, al final, el resultado sera un float, y en algun momento, los valores que forman parte de la expresion seran convertidos a float para realizar las operaciones. Lo mismo sucedera si mezclas char e int, el resultado sera un int, y en algun momento dejara de haber elementos char en al expresion, porque seran convertidos a int. Puedes buscar informacion sobre la promocion (creo que se llamaba asi) entre los distintos tipos de dato. Si estas informado te encontraras con menos sorpresas inesperadas. ¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
DickGumshoe
|
Muchas gracias por la aclaración, do-while ^^
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Elevar a cualquier potencia. [Batch]
Scripting
|
leogtz
|
2
|
11,034
|
9 Abril 2009, 23:34 pm
por leogtz
|
|
|
[Python] elevar al cuadrado un rango.
Scripting
|
Meta
|
2
|
20,367
|
12 Noviembre 2010, 11:00 am
por Meta
|
|
|
Ejercicio elevar una potencia
Ejercicios
|
SXF
|
5
|
22,200
|
9 Noviembre 2011, 16:12 pm
por landerzx
|
|
|
Elevar un número a una potencia en C
« 1 2 »
Programación C/C++
|
eaguel
|
13
|
62,032
|
13 Mayo 2019, 23:58 pm
por aramis
|
|
|
elevar al cuadrado y al cubo
Programación C/C++
|
estudiante_1
|
5
|
5,633
|
19 Agosto 2015, 23:20 pm
por furciorifa
|
|