Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Marttyn en 28 de Febrero de 2013, 16:30:05
Título: Expresion constante con valor float? (solucionado)
Publicado por: Marttyn en 28 de Febrero de 2013, 16:30:05
Tengo este codigo:
Código: C
#define MIN 1000
#define MAX 5000
#define AMP (MAX - MIN) //amplitud o ancho modificable
#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
float x =0;
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
#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
Título: Re: Expresion constante con valor float? (solucionado)
Publicado por: bmb 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.#define MIN 1000.0
2.#define MAX 5000.0
3.#define AMP (MAX - MIN) //amplitud o ancho modificable
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!
Título: Re: Expresion constante con valor float? (solucionado)
Publicado por: Marttyn 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