Uma condição de erro de tamanho pode ocorrer de quatro maneiras diferentes:
- Quando o valor absoluto do resultado de uma avaliação aritmética, após o alinhamento do ponto decimal, excede o maior valor que pode ser contido no campo de resultado.
- Quando a divisão por zero ocorre.
- Quando o resultado de uma instrução aritmética é armazenado em um campo de data com janelas eo ano do resultado fica fora da janela do século. Por exemplo, dado YEARWINDOW (1940) (que especifica uma janela de século de 1940-2039), a seguinte instrução SUBTRACT causa um erro de tamanho:
01 WINDOWED-YEAR DATE FORMAT YY PICTURE 99
VALUE IS 50.
...
SUBTRACT 20 FROM WINDOWED-YEAR
ON SIZE ERROR imperative-statement
O erro de tamanho ocorre porque o resultado da subtração, um campo de data com janelas, tem um valor de ano efetivo de 1930, que cai fora da janela do século. Para detalhes sobre como os campos de data janelas são tratados como se fossem convertidas para formato de data expandida.
Para mais informações sobre como erros de tamanho pode ocorrer quando se utiliza campos de data.
- Em uma expressão exponencial, conforme indicado na tabela a seguir:
A condição de erro de tamanho aplica-se apenas aos resultados finais, não a quaisquer resultados intermediários.
Se o identificador resultante for definido com USAGE IS BINARY, COMPUTATIONAL, COMPUTATIONAL-4 ou COMPUTATIONAL-5, o maior valor que pode conter é o valor máximo implícito pela sua decimal associada PICTURE caracteres, independentemente do compilador TRUNC Opção em vigor.
Se a frase REDONDADA for especificada, arredondamento ocorre antes da verificação de erro de tamanho.
Quando ocorre um erro de tamanho, a ação subseqüente do programa depende se a frase ON SIZE ERROR é especificada.
Se a frase ON SIZE ERROR não for especificada e ocorrer uma condição de erro de tamanho, as regras de truncamento serão aplicadas eo valor do identificador resultante resultante será computado.
Se a frase ON SIZE ERROR for especificada e ocorrer uma condição de erro de tamanho, o valor do identificador resultante afetado pelo erro de tamanho não será alterado; Ou seja, os resultados de erro não são colocados no identificador de recepção. Após a conclusão da execução da operação aritmética, a instrução imperativa na frase ON SIZE ERROR é executada, o controle é transferido para o final da instrução aritmética e a frase NOT ON SIZE ERROR, se especificada, é ignorada.
Para as instruções CORRESPONDING ADD e CORRESPONDING SUBTRACT, se uma operação aritmética individual causa uma condição de erro de tamanho, a declaração imperativa ON SIZE ERROR não é executada até que todas as adições ou subtrações individuais tenham sido concluídas.
Se a frase NOT ON SIZE ERROR tiver sido especificada e, após a execução de uma operação aritmética, uma condição de erro de tamanho não existir, a frase NOT ON SIZE ERROR será executada.
Quando as frases ON SIZE ERROR e NOT ON SIZE ERROR são especificadas e a declaração na frase que é executada não contém qualquer transferência explícita de controle, então, se necessário, uma transferência implícita de controle é feita após a execução da frase para o Fim da declaração aritmética.