Valores de punto flotante
Esta información corresponde a los controladores
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, Compact GuardLogix
5380, CompactLogix
5380, ControlLogix
5580, GuardLogix
5580 y ControlLogix 5590. Las diferencias de controladores se indican cuando corresponda.Los controladores Logix gestionan los valores de punto foltante según la normativa IEEE 754 para la aritmética de punto flotante. Esta normativa define cómo se deben almacenar y calcular los números de punto flotante. La normativa IEEE 754 para los cálculos de punto flotante se diseñó para poder gestionar números muy grandes con una cantidad de almacenamiento razonable y de forma rápida.
Una etiqueta REAL almacena un número de punto flotante normalizado de precisión única.
Una etiqueta LREAL almacena un número de punto flotante normalizado de precisión doble.
Los controladores son compatibles con los siguientes tipos de datos elementales:
Controladores | Tipo de datos |
|---|---|
controladores CompactLogix 5380, ControlLogix 5580, Compact GuardLogix 5380, GuardLogix 5580 y ControlLogix 5590 | REAL, LREAL |
Controladores CompactLogix 5370, ControlLogix 5570, Compact GuardLogix 5370 y GuardLogix 5570 | REAL |
Los números no normalizados y -0,0 se consideran como 0,0
Si un cálculo produce un valor NAN, el bit de signo podría ser positivo o negativo. En este caso, el software muestra 1#.NAN sin signo.
No todos los valores decimales se pueden representar de manera exacta con este formato estándar, lo que provoca una pérdida de precisión. Por ejemplo, si a 10,1 le resta 10, el resultado debería ser 0,1. En un controlador Logix, el resultado podría ser 0,10000038. En este ejemplo, la diferencia entre 0,1 y 0,10000038 es del 0,000038 %, o prácticamente cero. Para la mayoría de las operaciones, esta falta de precisión es insignificante. Para ponerlo en perspectiva: si enviara a un módulo de salida analógica un valor de punto flotante con una diferencia del 0,000038 %, no habría ninguna diferencia en el voltaje de salida.
Pautas para las operaciones matemáticas con punto flotante
Siga estas pautas:
Al realizar algunas operaciones matemáticas con punto flotante, es posible que haya una pérdida de precisión debida al error por redondeo. Los procesadores de punto flotante tienen una precisión interna propia y esta puede afectar a los valores resultantes.
No utilice operaciones matemáticas de punto flotante para las funciones de dinero o de totalizador. Utilice valores INT o DINT, increméntelos y realice el seguimiento del decimal (o utilice un valor INT o DINT para dólares y un segundo valor INT o DINT para los céntimos).
No compare números de punto flotante. En lugar de eso, compruebe los valores dentro de un rango. La instrucción LIM está pensada específicamente para esa función.
Ejemplos del totalizador
La precisión del tipo de datos REAL afecta a las aplicaciones de totalización, de tal manera que se producen errores al añadir números muy pequeños a números muy grandes.
Por ejemplo, añada 1 a un número durante un periodo de tiempo. En algún momento, la adición ya no cambiará el resultado porque la suma en ejecución es mucho mayor que 1, y no habrá suficientes bits como para almacenar todo el resultado. La adición almacena el máximo número posible de bits superiores y descarta los bits inferiores restantes.
Para solucionar este problema, haga el cálculo con números pequeños hasta que el resultado sea más grande. Entonces, muévalo a otra ubicación para cálculos matemáticos con números grandes. Por ejemplo:
- x es la variable incrementada pequeña.
- y es la variable incrementada grande.
- z es el recuento total actual que se puede usar en cualquier lugar.
- x = x+1;
- si x = 100 000;
- {
- y = y + 100 000;
- x = 0;
- }
- z = y + x;
Otro ejemplo:
- x = x + some_tiny_number;
- si (x >= 100)
- {
- z = z + 100;
- x = x - 100; // puede haber un resto muy pequeño
- }
Entregue su opinión