Valores de punto flotante

Los controladores Logix gestionan los valores de punto flotante 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:
  • REAL
  • LREAL
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 valores monetarios ni para funciones de totalizador. Utilice valores INT o DINT, escale los valores y tenga en cuenta la posición 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 su lugar, busque los valores dentro de un rango. La instrucción LIMIT está pensada específicamente para este propósito.
Ejemplos de totalizador
La precisión del tipo de datos REAL afecta a las aplicaciones de totalización, de modo que se producen errores al sumar números muy pequeños a números muy grandes.
Por ejemplo, sume 1 a un número durante un periodo de tiempo. En algún momento, la suma ya no cambiará el resultado porque la suma en ejecución es mucho mayor que 1, y no habrá suficientes bits para almacenar todo el resultado. La suma 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. Luego, muévalos a otra ubicación para cálculos adicionales 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;
  • if x = 100.000;
  • {
  • y = y + 100.000;
  • x = 0;
  • }
  • z = y + x;
Otro ejemplo:
  • x = x + some_tiny_number;
  • if (x >= 100)
  • {
  • z = z + 100;
  • x = x - 100; // Podría haber un pequeño resto
  • }
Entregue su opinión
¿Tiene dudas o comentarios acerca de esta documentación? Por favor deje su opinión aquí.
Normal