Autor Tema: comparacion de variables de distinto tipo  (Leído 2898 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
comparacion de variables de distinto tipo
« en: 12 de Julio de 2007, 15:56:41 »
Amigos : estoy teniendo un fallo en un circuito que hice de control de temperatura con una sonda tipo lm35 entrando por el adc del pic.

mi pregunta concreta es si esta expresion puede traeme resultados inciertos ( ejemplo 1999 grados de presentacion de display )

if (  med_actual( ) < tempe_mod2 - 1 ) // si se esta enfriando ...     // med_actual () es float y tempe_mod2 es un entero de 8


desde ya gracias!!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: comparacion de variables de distinto tipo
« Respuesta #1 en: 12 de Julio de 2007, 16:20:15 »
Puedes hacer un "cast" a la variable antes de comparar:
if (  med_actual( ) < (float)tempe_mod2 - 1 ) // si se esta enfriando ...   

Puedes leer sobre cast aquí
http://acm.asoc.fi.upm.es/documentacion/c2007/manual/node6.html

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: comparacion de variables de distinto tipo
« Respuesta #2 en: 12 de Julio de 2007, 16:27:08 »
gracias por contestar!

lo voy a hacer , ahora mi pregunta es si la falta del cast puede ocasionar resultados inciertos o aleatorios

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: comparacion de variables de distinto tipo
« Respuesta #3 en: 12 de Julio de 2007, 16:30:31 »
No sé en tu caso, pero yo me he llevado muchas desagradables sorpresas por operar con distintos tipos de variables.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: comparacion de variables de distinto tipo
« Respuesta #4 en: 12 de Julio de 2007, 16:50:05 »
lo voy a hacer , ahora mi pregunta es si la falta del cast puede ocasionar resultados inciertos o aleatorios

Un definitivo SI.

De hecho, creo que también debieras agregar (float) al 1


if (  med_actual( ) < (float)tempe_mod2 - (float) 1 )


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: comparacion de variables de distinto tipo
« Respuesta #5 en: 12 de Julio de 2007, 19:43:11 »
ok gracias , lo del 1 no lo habia notado.

pregunta: si quiero promover el resultado en entero , cuando paso el float a entero ,  como lo corta?( que hace con 2,27 por ejemplo )

desde ya gracias!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: comparacion de variables de distinto tipo
« Respuesta #6 en: 12 de Julio de 2007, 20:12:32 »
ok gracias , lo del 1 no lo habia notado.

pregunta: si quiero promover el resultado en entero , cuando paso el float a entero ,  como lo corta?( que hace con 2,27 por ejemplo )

desde ya gracias!

Creo que eso no te lo hará el compilador, al menos no que yo sepa. Es que directamente jamás se me ocurrió probarlo

Debes buscar alguna función que convierta de float a entero.  No es lo mismo 'castear' que 'convertir'.

El casteo es algo fijo , siempre igual, que trata con cosas que tienen que ver con cómo almacenará la información.

El pasar de float a entero, es completamente dependiente del exponente. 
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: comparacion de variables de distinto tipo
« Respuesta #7 en: 12 de Julio de 2007, 20:47:34 »
es verdad lo que decis Maunix , yo me referia a que cuando haces la promocion hacia entero del float con el casting , que es lo que pasa con la parte decimal , si la redondea hacia abajo , hacia arriba o no se que otra cosa...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: comparacion de variables de distinto tipo
« Respuesta #8 en: 12 de Julio de 2007, 20:51:17 »
Al convertir un float en entero, se trunca la parte decimal.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: comparacion de variables de distinto tipo
« Respuesta #9 en: 12 de Julio de 2007, 23:53:57 »
gracias jfh900!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: comparacion de variables de distinto tipo
« Respuesta #10 en: 13 de Julio de 2007, 01:34:48 »
De hecho, creo que también debieras agregar (float) al 1


if (  med_actual( ) < (float)tempe_mod2 - (float) 1 )


Otra forma de hacerlo es escribir el 1 directamente en formato float:

if (  med_actual( ) < (float)tempe_mod2 - 1.0 )


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: comparacion de variables de distinto tipo
« Respuesta #11 en: 13 de Julio de 2007, 08:37:22 »
es verdad lo que decis Maunix , yo me referia a que cuando haces la promocion hacia entero del float con el casting , que es lo que pasa con la parte decimal , si la redondea hacia abajo , hacia arriba o no se que otra cosa...

A pesar de que ya te han respondido, te pido consideres lo siguiente: un casteo, no es más que formatear una variable de una a otra. Es decir, un char lo casteamos en integer, un integer en un float.  El proceso queda 'fijo' en el código y por ende no se lo modifica. 

Esas rutinas, no saben qué valor tendrán las variables, simplemente transforman su resultado y por ende siempre truncan.  No se meten con redondeos y esas cosas, porque ya no hablaríamos de un 'casteo' sino de una función diferente.

Saludos

Manolo, confieso que lo uso así como tu lo pusiste en mis códigos, pero la verdad no se me ocurrió cuando puse mi ejemplo  :D :D , y la verdad que hacía falta que lo ponga alguien porque es la forma más simple.  :mrgreen: :mrgreen:
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: comparacion de variables de distinto tipo
« Respuesta #12 en: 13 de Julio de 2007, 11:53:04 »
les agradezco a todos por la contestación!

por una cuestion de velocidad del micro y porque lo puedo hacer voy a promover la variable float a entero y hacer la comparación. no tengo problema con la parte decimal para que prendan o apaguen los equipos de calefaccion o refrigeracion , por eso puedo truncar el float , pero en la presentacion del display si coloco el valor
del float.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: comparacion de variables de distinto tipo
« Respuesta #13 en: 13 de Julio de 2007, 13:27:09 »
ya entiendo a que se refieren cuando se habla de 'cast' , yo había usado ese operador y ahora es que me doy cuenta que tiene nombre

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek