19 sept 2010

MATEMATICA DE PUNTO FLOTANTE

           El compilador PROTON puede realizar calculos de Punto Flotante (32 x 32 bits IEEE 754).


           Declarar una variable como FLOAT permitirá los cálculos de punto flotante con esa variable.

La declaracion de una variable Punto Flotante se efectua de la siuiente manera;

       DIM VAR_FLT AS FLOAT

La declaracion de una Constante de Punto Flotante se efectua de la siuiente manera;


        SÍMBOLO PI = 3,14             
        SÍMBOLO FL_NUM = 5,0


       La aritmética de punto flotante no es lo máximo en exactitud, es simplemente una forma de comprimir un valor complejo o grande en un espacio pequeño (4 bytes en el caso del compilador). Resultados perfectamente adecuados por lo general se puede obtener de la escala correcta de variables de tipo entero, con un aumento en la velocidad y un ahorro de memoria RAM y el espacio de código. 32 bits de matemáticas de punto flotante es muy intensa ya que el microcontrolador PICmicro es sólo un procesador de 8 bits. También consume grandes cantidades de memoria RAM y espacio de los códigos para su funcionamiento, por lo tanto use siempre el  punto flotante con moderación, y sólo cuando sea estrictamente necesario. El punto flotante no está disponible en PICmicros núcleo de 12-bit debido a las restricciones de memoria, y es más eficiente cuando se utiliza con los dispositivos básicos de 16-bit debido al código más lineal y especificaciones de RAM.

Formato de punto flotante

        El compilador PROTON utiliza la variación del microchip del formato IEEE 754 de punto flotante. Las diferencias con la norma IEEE 745 son menores, y bien documentado en la nota de aplicación AN575 de Microchip (descargable en www.microchip.com).

        Números de punto flotante se representan en formato modificado IEEE-754. Este formato permite que a las rutinas de punto flotante aprovechar la arquitectura del PICmicro y reducir la cantidad de sobrecarga requerida en los cálculos. La representación se muestra a continuación en comparación con las normas del formato IEEE-754: donde s es el bit del signo, y es el LSB del exponente y x es un marcador de posición para la mantisa y exponente bits.

       Los dos formatos se pueden convertir fácilmente de una a la otra por la manipulación del exponente y la mantisa 0 bytes. El código de ensamblador siguiente se muestra un ejemplo de esta operación.

Formato              Exponente      Mantisa 0     Mantisa 1     Mantisa 2

IEEE-754            sxxx xxxx       xxxx xxxx      xxxx yxxx     xxxx xxxx

Microchip            xxxx xxxx       xxxx xxxy       sxxx xxxx    xxxx xxxx


IEEE-754 PARA MICROCHIP

RLF MANTISSA0
RLF exponente
RRF MANTISSA0


MICROCHIP PARA IEEE-754

RLF MANTISSA0
RRF exponente
RRF MANTISSA0

Las variables utilizadas por las Bibliotecas de punto flotante

        Varios registros de 8-bit de RAM son utilizados por las rutinas matemáticas para mantener los operandos y resultados de las operaciones de coma flotante. Dado que puede haber dos operandos necesarios para una operación de punto flotante (como la multiplicación o división), hay dos conjuntos de registros exponente y mantisa reservados (A y B). Para que el argumento A, PBP_AARGHHH sostiene el exponente y PBP_AARGHH, PBP_AARGH PBP_AARG y mantenga la mantisa. Para que el argumento B, PBP_BARGHHH sostiene el exponente y PBP_BARGHH, PBP_BARGH PBP_BARG y mantenga la mantisa.


Programas de Punto Flotante Ejemplo

"Multiplica dos valores de punto flotante

DEVICE = 18F452

XTAL = 4

DIM FLT que float

SÍMBOLO FL_NUM = 1,234 'Crear un punto flotante de valor constante

CLS

FLT = FL_NUM * 10

IMPRIMIR diciembre FLT

PARADA



'Agregar dos variables de punto flotante

DEVICE = 18F452

XTAL = 4

DIM FLT as float

DIM Flt1 as  float

DIM FLT2 as  float

CLS

Flt1 = 1,23

FLT2 = 1000,1

FLT = Flt1 FLT2

IMPRIMIR diciembre FLT

PARADA


Notas

          Expresiones de punto flotante que contiene más de 3 operandos no están permitidos, debido al espacio de RAM adicional necesario para una pila de software. Cualquier expresión que contiene una variable de punto flotante o el valor se calculará como un punto flotante. Aunque el término se aplica también contiene un byte, palabra o dword valor o variable.

        Si la variable de asignación es un byte, palabra o variable DWORD, pero la expresión tiene un carácter de punto flotante. A continuación, el resultado de punto flotante se convierte en un entero.

Ejemplo ;

DEVICE = 16F877

DIM DWD AS DWORD
DIM FLT que float
SÍMBOLO PI = 3,14
FLT = 10
DWD = FLT  + P      "El cálculo resultará en 13,14, pero se reducirán a un número entero 13
IMPRIMIR diciembre DWD ' Mostrar el resultado entero 13
PARADA

traducción del inglés al español


Requisitos de espacio de codigo

        Como se mencionó anteriormente, una precisión de punto flotante tiene un precio de velocidad, y el espacio de código. Ambas cuestiones no son un problema si un dispositivo básico de 16-bit se utiliza, sin embargo en  dispositivos de 14-bit básicos puede suponer un problema. El compilador intenta cargar las bibliotecas de punto flotante en la memoria baja, junto con todas las subrutinas de la biblioteca, pero si no entra dentro de los primeros 2048 bytes de espacio de código, y el PICmicro cuenta con más de 2048 bytes de código disponible, la bibliotecas de punto flotante podrá ser cargada en la parte superior de la memoria de 1000 bytes de código. Esto es invisible para el usuario, sin embargo, el compilador mostrará un aviso de que esté ocurriendo en caso de que parte de la memoria está siendo utilizado por su programa BASIC.

Mostrar más preciso valores en coma flotante

        De forma predeterminada, el compilador utiliza una rutina relativamente pequeño para la conversión de valores de punto flotante para preparar decimal, por RSOUT, $ PRINT STR etc Sin embargo, debido a su tamaño, ya que no realiza ningún redondeo del primer valor, y sólo es capaz de la conversión de valores relativamente pequeños. es decir, aproximadamente 6 dígitos de precisión. Con el fin de producir un resultado más exacto, el compilador necesita usar una rutina más grande. Esto se implementa mediante el uso de un DECLARA: -

FLOAT_DISPLAY_TYPE = LARGE o STANDARD

        Usando el modelo LARGE para declarar lo anterior dará lugar a que el compilador  use  la coma flotante más precisa a la rutina decimal. Tenga en cuenta que a pesar de que la rutina es más grande que el convertidor estándar, lo que realmente funciona mucho más rápido. Los valores por defecto del compilador para Norma, si este es declarar no se han concedido en el programa BASIC.

OPERADORES RELACIONALES

        Los operadores relacionales se utilizan para comparar dos valores, como se muestra en la siguiente lista. El resultado puede ser utilizado para tomar una decisión sobre el flujo del programa.

Relación         Operador         Expresión

Igualdad               =                 X = Y

Desigualdad         <>               X < > Y

Menor que            <                X  < Y

Mayor que            >                X >  Y

Menor o igual        <=             X  < =  Y

Mayor o igual       >=              X  > =  Y