COBOL - Coding your program - Formats for numeric data



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - Codificando seu programa - Formatos para dados numéricos
Enterprise COBOL for z/OS, Version 4.2

Vários formatos estão disponíveis para dados numéricos.

Itens decimais externos (DISPLAY e NATIONAL)

Quando USAGE DISPLAY está em vigor para um item de dados numéricos de categoria (porque você o codificou ou por padrão), cada posição (byte) de armazenamento contém um dígito decimal.
Os itens são armazenados em formato exibível.
Os itens decimais externos que possuem USAGE DISPLAY são referidos como itens de dados decimais zoneados.

Quando USAGE NATIONAL está em vigor para um item de dados numéricos de categoria, 2 bytes de armazenamento são necessários para cada dígito decimal.
Os itens são armazenados no formato UTF-16.
Os itens decimais externos com USAGE NATIONAL são chamados de itens de dados decimais nacionais.

Os itens de dados decimais nacionais, se assinados, devem ter a cláusula SIGN SEPARATE em vigor.
Todas as outras regras para itens decimais zoneados se aplicam aos itens decimais nacionais.
Você pode usar itens decimais nacionais em qualquer lugar onde outros itens de dados numéricos de categoria possam ser usados.

Os itens de dados decimais externos (decimais zoneados e decimais nacionais) destinam-se principalmente a receber e enviar números entre o programa e arquivos, terminais ou impressoras.
Você também pode usar itens decimais externos como operandos e receptores no processamento aritmético.
No entanto, se o seu programa realiza muita aritmética intensiva e a eficiência é uma prioridade alta, os tipos numéricos computacionais do COBOL podem ser uma escolha melhor para os itens de dados usados na aritmética.

Itens de ponto flutuante externo (DISPLAY e NATIONAL)

Quando USAGE DISPLAY está em vigor para um item de dados de ponto flutuante (porque você o codificou ou por padrão), cada posição de caractere PICTURE (exceto para v, um ponto decimal implícito, se usado) leva 1 byte de armazenamento.
Os itens são armazenados em formato exibível.
Os itens externos de ponto flutuante que possuem USAGE DISPLAY são referidos como itens de dados de ponto flutuante de exibição nestas informações, quando necessário, para distingui-los dos itens externos de ponto flutuante que possuem USAGE NATIONAL.

No exemplo a seguir, Compute-Result é implicitamente definido como um item de ponto flutuante de exibição:

           05  COMPUTE-RESULT  PIC -9V9(9)E-99.

Os sinais de menos (-) não significam que a mantissa e o expoente devam ser necessariamente números negativos.
Em vez disso, eles significam que quando o número é exibido, o sinal aparece em branco para números positivos ou um sinal de menos para números negativos.

Quando USAGE NATIONAL está em vigor para um item de dados de ponto flutuante, cada posição de caractere PICTURE (exceto para v, se usado) leva 2 bytes de armazenamento.
Os itens são armazenados como caracteres nacionais (UTF-16).
Os itens de ponto flutuante externo que possuem USAGE NATIONAL são chamados de itens de dados de ponto flutuante nacional.

As regras existentes para exibir itens de ponto flutuante se aplicam a itens nacionais de ponto flutuante.

No exemplo a seguir, COMPUTE-RESULT-N é um item de ponto flutuante nacional:

           05  COMPUTE-RESULT-N  PIC -9V9(9)E-99  USAGE NATIONAL.

Se COMPUTE-RESULT-N for exibido, os sinais aparecem conforme descrito acima para COMPUTE-RESULT, mas em caracteres nacionais.
Em vez disso, para exibir COMPUTE-RESULT-N em caracteres EBCDIC, direcione-o para o console:


           DISPLAY COMPUTE-RESULT-N UPON CONSOLE

Você não pode usar a cláusula VALUE para itens de ponto flutuante externos.

Como acontece com os números decimais externos, os números de ponto flutuante externos devem ser convertidos (pelo compilador) em uma representação interna de seu valor numérico antes de serem usados ??em operações aritméticas.
Se você compilar com a opção padrão ARITH (COMPAT), os números de ponto flutuante externos são convertidos para o formato de ponto flutuante longo (64 bits).
Se você compilar com ARITH (EXTEND), eles serão convertidos para o formato de ponto flutuante de precisão estendida (128 bits).

Itens binários (COMP)

BINARY, COMP e COMP-4 são sinônimos.
Os números de formato binário ocupam 2, 4 ou 8 bytes de armazenamento.
Se a cláusula PICTURE especifica que um item é assinado, o bit mais à esquerda é usado como o sinal operacional.

Um número binário com uma descrição PICTURE de quatro ou menos dígitos decimais ocupa 2 bytes; cinco a nove dígitos decimais, 4 bytes; e 10 a 18 dígitos decimais, 8 bytes.
Itens binários com nove ou mais dígitos requerem mais manuseio por parte do compilador.
Testá-los para a condição SIZE ERROR e arredondamento é mais complicado do que com outros tipos.

Você pode usar itens binários, por exemplo, para índices, subscritos, opções e operandos aritméticos ou resultados.

Use a opção do compilador TRUNC (STD | OPT | BIN) para indicar como os dados binários (BINARY, COMP ou COMP-4) devem ser truncados.

Itens binários nativos (COMP-5)

Os itens de dados que você declara como USAGE COMP-5 são representados no armazenamento como dados binários.
No entanto, ao contrário dos itens USAGE COMP, eles podem conter valores de magnitude até a capacidade da representação binária nativa (2, 4 ou 8 bytes) em vez de serem limitados ao valor implícito pelo número de 9s na cláusula PICTURE.

Quando você move ou armazena dados numéricos em um item COMP-5, o truncamento ocorre no tamanho do campo binário em vez de no limite de tamanho COBOL PICTURE.
Quando você faz referência a um item COMP-5, o tamanho do campo binário completo é usado na operação.

COMP-5 é, portanto, particularmente útil para itens de dados binários que se originam em programas não COBOL, onde os dados podem não estar em conformidade com uma cláusula COBOL PICTURE.

A tabela abaixo mostra os intervalos de valores possíveis para itens de dados COMP-5.

Tabela 1. Variações no valor dos itens de dados COMP-5

PICTURE Representação de armazenamento Valores numéricos
S9(1) a S9(4) Binary halfword (2 bytes) -32768 a +32767
S9(5) a S9(9) Binary fullword (4 bytes) -2,147,483,648 a +2,147,483,647
S9(10) a S9(18) Binary doubleword (8 bytes) -9,223,372,036,854,775,808 a +9,223,372,036,854,775,807
9(1) a 9(4) Binary halfword (2 bytes) 0 a 65535
9(5) a 9(9) Binary fullword (4 bytes) 0 a 4,294,967,295
9(10) a 9(18) Binary doubleword (8 bytes) 0 a 18,446,744,073,709,551,615

Você pode especificar a escala (ou seja, posições decimais ou posições inteiras implícitas) na cláusula PICTURE dos itens COMP-5.
Se você fizer isso, você deve dimensionar adequadamente as capacidades máximas listadas acima.
Por exemplo, um item de dados que você descreve como PICTURE S99V99 COMP-5 é representado no armazenamento como uma meia palavra binária e oferece suporte a uma faixa de valores de -327,68 a +327,67.

Literais grandes em cláusulas VALUE:

Os literais especificados nas cláusulas VALUE para itens COMP-5 podem, com algumas exceções, conter valores de magnitude até a capacidade da representação binária nativa.
Consulte a Referência de linguagem Enterprise COBOL para as exceções.

Independentemente da configuração da opção do compilador TRUNC, os itens de dados COMP-5 se comportam como os dados binários em programas compilados com TRUNC (BIN).

Itens decimais compactados (COMP-3)

PACKED-DECIMAL e COMP-3 são sinônimos.
Os itens decimais compactados ocupam 1 byte de armazenamento para cada dois dígitos decimais que você codificar na descrição PICTURE, exceto que o byte mais à direita contém apenas um dígito e o sinal.
Este formato é mais eficiente quando você codifica um número ímpar de dígitos na descrição de PICTURE, de forma que o byte mais à esquerda seja totalmente utilizado.
Itens decimais compactados são tratados como números de ponto fixo para fins aritméticos.

Itens de ponto flutuante interno (COMP-1 e COMP-2)

COMP-1 refere-se ao formato de ponto flutuante curto e COMP-2 refere-se ao formato de ponto flutuante longo, que ocupa 4 e 8 bytes de armazenamento, respectivamente.
O bit mais à esquerda contém o sinal e os próximos 7 bits contêm o expoente; os 3 ou 7 bytes restantes contêm a mantissa.

Os itens de dados COMP-1 e COMP-2 são armazenados no formato hexadecimal zSeries®.



© Copyright IBM Corp.