Autor Tema: Expresion constante con valor float? (solucionado)  (Leído 1111 veces)

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

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Expresion constante con valor float? (solucionado)
« en: 28 de Febrero de 2013, 16:30:05 »
Tengo este codigo:
Código: C
  1. #define MIN    1000
  2. #define MAX    5000
  3. #define AMP    (MAX - MIN)    //amplitud o ancho modificable
  4. #define VAL_UNI (AMP / 255)    //incremento por cada unidad de ADC

Segun esto, VAL_UNI deberia ser 15,6862...

y haciendo esto:

Código: C
  1. float x = 0;
  2. x = VAL_UNI;

me da que x es 15, sin decimales.
Cual es el problema?

Esto en realidad es un poco mas complejo, pero el problema de base viene aqui, porque luego tengo que multiplicar eso por otro valor, y el resultado es muy diferente si tengo los valores decimales o no...

-------

Ya encontre el "problema". haciendo:
Código: C
  1. #define VAL_UNI    ((float)AMP / 255)

El problema desaparece. Lo curioso para mi es que pensaba que los #define substituian sin modificar nada, exceptuando cuando se podia simplificar alguna operacion matematica, pero manteniendo el resultado real. Veo que no, y no se si es normal o no, pero para la proxima ya lo se  ((:-))

Dado que encontre la respuesta antes de postear la pregunta, la publico igualmente por si a alguien le sirve de algo.
Salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Expresion constante con valor float? (solucionado)
« Respuesta #1 en: 28 de Febrero de 2013, 18:44:06 »
Hola Marttyn, en las definiciones como en las operaciones de cualquier tipo, debes poner los números de manera que el compilador entienda que se trata de flotantes.  Por ejemplo en tu caso sería:

Código: C
  1. 1.#define MIN    1000.0
  2. 2.#define MAX    5000.0
  3. 3.#define AMP    (MAX - MIN)    //amplitud o ancho modificable
  4. 4.#define VAL_UNI       (AMP / 255.0)    //incremento por cada unidad de ADC

Por supuesto, también es válido el type casting, que es como lo solucionaste.

Saludos!

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: Expresion constante con valor float? (solucionado)
« Respuesta #2 en: 28 de Febrero de 2013, 20:17:15 »
Gracias bmb! No conocia eso de ponerle el punto para que entienda que es un float.
Me has enseñado un nuevo truquito antes de irme a dormir :)
Salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.


 

anything