Hola Alfhost,
siempre debes hacer un test de clase ( if variable is numeric ) porque no toda operacion aritmetica con datos no numericos da un S0C7.
Te paso un ejemplo de programa COBOL que podras compilar y ejecutar en tu instalación y en el que multiplicaremos ABC * 2 y obtendremos un resultado :
IDENTIFICATION DIVISION.
PROGRAM-ID. NOS0C7.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VARIABLES.
05 WS-PARM.
10 WS-0 PIC X(03) VALUE 'ABC'.
10 WS-1 REDEFINES WS-0 PIC 9(03).
10 WS-2 PIC 9(03).
PROCEDURE DIVISION.
COMPUTE WS-2 = WS-1 * 2
DISPLAY 'WS-0: ' WS-0
DISPLAY 'WS-1: ' WS-1
DISPLAY 'WS-2: ' WS-2
STOP RUN.
Al ejecutarlo, los displays dan lo siguiente
WS-0: ABC
WS-1: ABC
WS-2: 246
Este programa funciona correctamente y efectivamente el resultado de multiplicar la WS-1 cuyo contenido es 'ABC' por 2 da el numero 246.
El tema es facil de observar en el assembler que genera la instruccion COMPUTE de COBOL.
000014 COMPUTE
PACK 240(3,13),0(3,8)
OI 242(13),X'0F'
MP 240(3,13),67(1,10)
UNPK 3(3,8),241(2,13)
OI 5(8),X'F0'
La clave esta en la instruccion PACK que transforma la supuesta variable numérica WS-1, pero que contiene el string ‘ABC’, en una variable interna empaquetada ( similar al COMP-3). Esto lo hace descartando los primeros ½ bytes de cada carácter sin verificar si corresponden a una configuración numérica.
ABC tiene la configuración hexadecimal
CCC
123
Por lo tanto si se descartan los medios bytes que contienen C se obtiene el numero 123; la siguiente instrucción OI garantiza que este numero es positivo ya que en la definición de la variable WS-1 no hay signo; luego multiplica esta variable interna empaquetada que contiene 123 por 2, que obviamente da como resultado 246; las dos instrucciones siguientes devuelven el valor 246 a la variable WS-2 desempaquetando la variable interna.
Como podras ver si compilas este programa y lo ejecutas, logramos multiplicar ABC * 2, no dio abend S0C7 y obtuvimos el resultado 246.
Este resultado es un exponente de una clase de operaciones similares que a priori se diria que no pueden ejecutarse pero que realmente generan resultados numericos, por lo que para asegurarte que tus calculos sean correctos si o si debes hacer el test de clase y preguntar si las variables numéricas poseen realmente números ( if variable is numeric ).