Los números dentro de los microcontroladores típicos no tienen puntos decimales en absoluto. Son enteros binarios. No hay decimales dentro de la máquina. El compilador o ensamblador puede permitirle especificar constantes de esa manera, pero se convierten a binario antes de que la máquina los vea.
Sin embargo, puede decidir las unidades que desee para los valores enteros. Por ejemplo, suponga que desea representar dólares dentro de un micro. No puede hacer nativamente $ 3.21, pero podría hacer 321 centavos. El micro solo está operando en el valor 321, pero sabes que representa unidades de 1/100 dólares.
Ese es solo un ejemplo para ilustrar el concepto de unidades arbitrarias. A menudo, los números se representan con varios bits de fracción binaria. Es lo mismo que decir que cada cuenta representa un valor de 2 -N , donde N es el número de bits de fracción. Esta representación se llama "punto fijo". Usted decide por adelantado cuánta resolución necesita y finge que hay suficientes bits a la derecha del punto binario imaginado para admitir esa resolución. Por ejemplo, supongamos que necesita representar algo con al menos una resolución de 1/100. En ese caso, usarías al menos 7 bits de fracción, ya que 2 7 = 128. Eso te dará una resolución de 1/128.
La máquina no tiene idea de que esto está sucediendo. Sumará y restará estos números como enteros ordinarios, pero todo sigue funcionando. Se vuelve un poco complicado cuando multiplica y divide valores de puntos fijos. El producto de dos valores de punto fijo con N bits de fracción tendrá 2N bits de fracción. A veces solo hace un seguimiento del hecho de que el nuevo número tiene 2N bits de fracción, o a veces puede cambiarlo a la derecha por N bits para volver a la misma representación que antes.
El punto flotante es lo mismo, pero el número de bits de fracción se almacena junto con la parte entera para que este ajuste se pueda realizar en tiempo de ejecución. Realizar operaciones matemáticas en números de coma flotante puede tomar varios ciclos. El hardware de punto flotante hace todo esto por usted para que las operaciones se completen rápidamente. Sin embargo, las mismas manipulaciones se pueden realizar también en el software. No hay ninguna razón por la que no pueda escribir una subrutina para agregar dos números de coma flotante, solo que llevaría mucho más tiempo que el hardware dedicado haciendo lo mismo.
He definido un formato de punto flotante de 3 bytes para PIC de 8 bits y he escrito un montón de rutinas para manipularlos. Los microcontroladores usualmente manejan valores del mundo real con una precisión de 10 o 12 bits como máximo. Mi formato de coma flotante usa 16 bits de precisión, lo cual es lo suficientemente bueno para varios cálculos intermedios.
También tengo un formato de 32 bits para los PIC de 16 bits. Esto usa una palabra de 16 bits para la mantisa, lo que acelera los cálculos ya que estos PIC pueden operar en 16 bits a la vez.
Estas rutinas están incluidas en mi versión de Herramientas de desarrollo PIC . Después de la instalación, mire los archivos con "fp24" en su nombre en el directorio SOURCE> PIC y "fp32f" en el directorio SOURCE> DSPIC.