TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micro_pepe en 27 de Abril de 2012, 18:27:50
-
Estoy traduciendo un programa de Arduino a CCS, en el origen utiliza variables tipo "double", pero CCS no lo soporta. Las cuentas que tengo que hacer son estas:
double frequence;//Maximo 70000000
long int y;//32 bit.
double x;
x=4294967295 / 125;
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
¿Se puede mejorar de alguna forma la precisión?
1 saludo.
-
utiliza float
de todas formas tu calculo se reduce a:
y=frequence*34,35973836;
-
Hola
Sí, se puede. Incluso sin usar punto flotante... pero deberás usar datos de 64 bits.
#define START_X 4294967295 //2 ^ 32 - 1
long int frequency; //64 bits
int y; //32 bits
frequency = frequency * START_X; //el dato sigue cabiendo en la var de 64 bits
frequency /= 125; //no pierde tanta precisión porque se sigue trabajando en un recipiente de 64 bits
y = frequency / 1000000; //ya pierde precisión pero el dato se entrega a int, así que no hay de otra
-
Hola
Sí, se puede. Incluso sin usar punto flotante... pero deberás usar datos de 64 bits.
#define START_X 4294967295 //2 ^ 32 - 1
long int frequency; //64 bits
int y; //32 bits
frequency = frequency * START_X; //el dato sigue cabiendo en la var de 64 bits
frequency /= 125; //no pierde tanta precisión porque se sigue trabajando en un recipiente de 64 bits
y = frequency / 1000000; //ya pierde precisión pero el dato se entrega a int, así que no hay de otra
Eso es lo que estaba buscando, pero miré en la ayuda del CCS, y no he visto que soporte variables de 64bit.
Saludos.
-
Hola:
Suky trató el tema en su página en c18.
http://www.micros-designs.com.ar/c18-logica-de-64-bits-suma-resta-multiplicacion-division/
Saludos
Jukinch
-
Suerte con las uniones en CCS (Anti-ANSI) jeje
-
Bueno, ya está funcionando con las librerias de Suky ligeramente adaptadas.
1 Saludo.