Autor Tema: Mejorar la precisión del punto flotante.  (Leído 2170 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Mejorar la precisión del punto flotante.
« 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.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mejorar la precisión del punto flotante.
« Respuesta #1 en: 27 de Abril de 2012, 20:48:49 »
utiliza float

de todas formas tu calculo se reduce a:


y=frequence*34,35973836;

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mejorar la precisión del punto flotante.
« Respuesta #2 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
« Última modificación: 28 de Abril de 2012, 11:11:32 por migsantiago »

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Mejorar la precisión del punto flotante.
« Respuesta #3 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.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Mejorar la precisión del punto flotante.
« Respuesta #4 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
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mejorar la precisión del punto flotante.
« Respuesta #5 en: 28 de Abril de 2012, 20:25:34 »
Suerte con las uniones en CCS (Anti-ANSI) jeje

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Mejorar la precisión del punto flotante.
« Respuesta #6 en: 29 de Abril de 2012, 13:20:14 »
Bueno, ya está funcionando con las librerias de Suky ligeramente adaptadas.

1 Saludo.
« Última modificación: 29 de Abril de 2012, 18:43:23 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡