TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micro_pepe en 27 de Abril de 2012, 18:27:50

Título: Mejorar la precisión del punto flotante.
Publicado 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:

Código: [Seleccionar]
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.
Título: Re: Mejorar la precisión del punto flotante.
Publicado por: MerLiNz en 27 de Abril de 2012, 20:48:49
utiliza float

de todas formas tu calculo se reduce a:


y=frequence*34,35973836;
Título: Re: Mejorar la precisión del punto flotante.
Publicado por: migsantiago en 28 de Abril de 2012, 11:08:33
Hola

Sí, se puede. Incluso sin usar punto flotante... pero deberás usar datos de 64 bits.

Código: [Seleccionar]
#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
Título: Re: Mejorar la precisión del punto flotante.
Publicado por: micro_pepe en 28 de Abril de 2012, 13:45:12
Hola

Sí, se puede. Incluso sin usar punto flotante... pero deberás usar datos de 64 bits.

Código: [Seleccionar]
#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.
Título: Re: Mejorar la precisión del punto flotante.
Publicado por: jukinch en 28 de Abril de 2012, 17:41:40
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
Título: Re: Mejorar la precisión del punto flotante.
Publicado por: migsantiago en 28 de Abril de 2012, 20:25:34
Suerte con las uniones en CCS (Anti-ANSI) jeje
Título: Re: Mejorar la precisión del punto flotante.
Publicado por: micro_pepe en 29 de Abril de 2012, 13:20:14
Bueno, ya está funcionando con las librerias de Suky ligeramente adaptadas.

1 Saludo.