Autor Tema: Algo INEXPLICABLE! bug???  (Leído 1464 veces)

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

Desconectado championz

  • PIC16
  • ***
  • Mensajes: 127
Algo INEXPLICABLE! bug???
« en: 14 de Diciembre de 2006, 23:58:48 »
Buenas, tengo un problema en CCS, hice un programa que suma a una variable 0,1 cada cierto tiempo
este es el codigo:


var = var + 0.1;

pero cuando llega a 2.2 no suma, es decir...


var=2.1

var=2.2

var=2.2 --- este paso lo hace dos veces... que puede ser?

var=2.3


un abrazo y gracias!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Algo INEXPLICABLE! bug???
« Respuesta #1 en: 15 de Diciembre de 2006, 02:18:58 »
Ese problema seguro que es debido a la pérdida de precisión que se produce al convertir un número a float.

Si echas un vistazo a esta página que hace referencia a PHP pero sirve como ejemplo, http://www.php-es.com/language.types.float.html, encontrarás este recorte:

Es bastante común que algunas fracciones decimales simples como 0.1 o 0.7 no puedan ser convertidas a su representación binaria interna sin perder un poco de precisión. Esto puede llevar a resultados confusos: por ejemplo, floor((0.1+0.7)*10) usualmente devolverá 7 en lugar del esperado 8 ya que el resultado de la representación interna es en realidad algo como 7.9999999999....

Esto se encuentra relacionado al hecho de que es imposible expresar de forma exacta algunas fracciones en notación decimal con un número finito de dígitos. Por ejemplo, 1/3 en forma decimal se convierte en 0.3333333. . ..

Así que nunca confíe en resultados de números flotantes hasta el último dígito, y nunca compare números de punto flotante para conocer si son equivalentes. Si realmente necesita una mejor precisión, es buena idea que use las funciones matemáticas de precisión arbitraria o las funciones gmp en su lugar

Una posible solución para tu problema, sería trabajar todo el rato con números enteros, y dividir por 10 el resultado sólo para visualizarlo.