Tipo de artículo: FAQ, ID de artículo 14844391, Fecha del artículo: 11/11/2005
(0)
Evaluar

¿Con qué exactitud se realizan los cálculos utilizando números REALES en fórmulas grandes?

  • Artículo
  • Relacionado con producto(s)


Descripción:  
Normalmente, los números REALES se indican y se calculan con una exactitud de 6 decimales. Al realizar cálculos, hay que tener en cuenta que en cada paso de cálculo también es válida esta exactitud.

Al sumar y restar, se igualan los exponentes. Es decir, al sumar y restar se mantienen las bases y los exponentes, solo se suman las mantisas. 

Ejemplo 1:

Se debe calcular la siguiente fórmula:

y = a + b - c;

z =1 / y;

con 

a = 100.000.000       como valor REAL = 1,000000 * 108

b = 1                       como valor REAL = 1,000000 * 100

c = 100.000.000       como valor REAL = 1,000000 * 108

  • En el primer paso del cálculo se calcula (a + b):
    (a + b) = 1,000000 * 108 + 1,000000 * 100, después de la igualación de exponentes se obtiene (a + b) = 1,000000 * 108 + 0,00000001 * 108. Se cortan las 2 últimas posiciones del segundo número, ya que no se pueden representar (exactitud de 6 posiciones decimales). 
  • Por tanto, se suma un CERO
  • En el segundo paso de cálculo ((a + b)-c), se resta c al resultado anterior:
    ((a + b)-c) = 1,000000 * 108 - 1,000000 * 108 = 0,000000 e0
  • Si ahora se calcula z, entonces se intenta dividir entre CERO 

Para obtener un cálculo correcto, en este caso, se ha que cambiar el orden del cálculo.

y = a - c + b;

z = 1 / y;

Debido a que después del primer cálculo (a - c) se obtiene el resultado 0,000000 e0, en el segundo paso ((a -c) + b) se obtiene el resultado correcto al sumar el número REAL. 

y = 0,000000 * 100 + 1,00000 * 100 = 1,000000 * 100 

Por tanto, antes de programar un cálculo, hay que comprobar la forma idónea de hacerlo.
Se dispone de información adicional sobre este tema en la ayuda Online del STEP 7, bajo el tema "Tipo de datos REAL".

Ejemplo 2:

Se debe dividir el número 160.0 entre el número 100.0. Para realizar este cálculo, existen 2 variantes, o bien 160.0 / 100.0 o bien 160.0 * 0.01, pero en la segunda variante hay tener en cuenta lo siguiente. Según la tabla 1, ambas variantes suministran el mismo resultado, pero no la misma exactitud de cálculo en formato HEX.

 

Variante 1: Variante 2:
STEP 7 S7-SCL STEP 7 S7-SCL
L  1.6e+002 X1 = 1.6e+002 L  1.6e+002 X3 = 1.6e+002
L  1.0e-002 X2 = 1.0e-002 L  1.0e+002 X4 = 1.0e+002
*R Y1 = X1 * X2 
      = 1.6 * 1.0 e(+002-002)
/R Y2 = X3 / X4 
      = (1.6 / 1.0) e(+002-002)
T  MD0 Y1 = 1.6 T  MD4 Y2 = 1.6

Tabla 1: Dos variantes diferentes en la división de números REALES en el editor KOP/AWL/FUP

El motivo de ello es que ambos números REALES en la primera variante (160.0 y 0.01) están más separados en el rango de números que los números REALES de la segunda variante (160.0 y 100.0). Estas repercusiones en la exactitud de cálculo son válidas para el STEP 7, en el editor KOP, AWL, FUP, y para el paquete opcional S7-SCL.

Ejemplo de cálculo en el editor KOP, AWL, FUP del STEP 7:
En la tabla de variables (figura 1), se representan las dos dobles palabras de marcas (MD0 y MD4), tanto en formato HEXADECIMAL como en coma flotante. Los números REALES son iguales en ambas variantes (= 1.6), pero en la representación HEXADECIMAL hay diferencias en las 2 últimas posiciones del valor HEX.

Figura 1: Programa de ambas variantes de cálculo en el editor KOP/AWL/FUP.

Ejemplo de cálculo con el paquete opcional S7-SCL:
El programa S7-SCL indicado abajo contiene 2 funciones. Con ayuda de la función FC10, se implementa la división de los números REALES con "X1*X2", y con ayuda de la función FC11, se implementa la división con "X3/X4". Los resultados se transfieren, en la llamada de las funciones en el OB1, a las dobles palabras de marcas MD10 y MD20.

Figura 2: Programa S7-SCL para el cálculo de ambas variantes según la tabla 1

En la tabla "Visualizar / Forzar variables", se representan los resultados de las funciones (MD10 y MD20), tanto en formato HEXADECIMAL como en coma flotante. Aquí, los números REALES también son iguales en ambas variantes (= 1.6), pero en la representación HEXADECIMAL hay diferencias en las 2 últimas posiciones del valor HEX.

Figura 3: Tabla "Visualizar / Forzar variables", con la representación de los resultados en formato HEXADECIMAL y coma flotante en S7-SCL

Conceptos de búsqueda:
Exactitud de cálculo


Informaciones del error
Descripción detallada del fallo
Ayúdenos a mejorar la Asistencia en línea.
La página solicitada no puede ser visualizada. Póngase en contacto con el webmaster
Contacto con el webmaster