COBOL número computational, os comps da vida
Em COBOL, um número computational é um tipo de dado numérico armazenado em formato interno otimizado para processamento, em vez de formato textual. Ele é definido usando cláusulas como COMP, COMP-1, COMP-2, COMP-3, COMP-4 e COMP-5. Esses formatos permitem cálculos mais rápidos e eficientes, utilizando representação binária, decimal empacotada ou ponto flutuante. Números computacionais são amplamente usados em sistemas de mainframe para contadores, cálculos financeiros e operações matemáticas intensivas. A escolha do tipo correto garante melhor desempenho, precisão e compatibilidade com o hardware IBM z/OS.
1. COMPUTATIONAL-1 (COMP-1)
-
Uso principal: Representar números reais de ponto flutuante de precisão simples (single precision).
-
Formato interno:
-
Armazena números em 32 bits (4 bytes).
-
Compatível com operações matemáticas em ponto flutuante, permitindo frações.
-
-
Quando usar:
-
Para cálculos que envolvem valores decimais aproximados, como medições científicas, estatísticas ou cálculos financeiros que toleram pequenas imprecisões.
-
-
Exemplo de declaração:
Aqui
Vindica a posição decimal virtual;COMP-1diz que será armazenado como 32-bit float.
2. COMPUTATIONAL-2 (COMP-2)
-
Uso principal: Representar números reais de ponto flutuante de precisão dupla (double precision).
-
Formato interno:
-
Armazena números em 64 bits (8 bytes).
-
Permite maior precisão e alcance do que COMP-1.
-
-
Quando usar:
-
Para cálculos que requerem alta precisão, como cálculos científicos complexos, engenharia ou finanças com grandes valores e frações pequenas.
-
-
Exemplo de declaração:
💡 Dica Mainframe:
-
Evite usar COMP-1/COMP-2 para somas monetárias exatas, porque erros de arredondamento podem ocorrer. Para dinheiro, prefira PACKED-DECIMAL (COMP-3).
-
COMP-1 e COMP-2 são ideais para científico ou grande alcance numérico.
🔹 COMPUTATIONAL-3 (COMP-3)
O queridinho do mundo bancário
📌 O que é
-
Decimal empacotado (Packed Decimal)
-
Cada dígito ocupa 4 bits
-
Último nibble guarda o sinal (C/D/F)
📦 Armazenamento
-
2 dígitos por byte
-
Muito compacto e exato
🧠 Para que serve
-
Valores monetários
-
Cálculos que NÃO podem ter erro de arredondamento
💰 Onde é usado
-
Bancos 🏦
-
Folha de pagamento
-
Sistemas financeiros
-
Contabilidade
🧪 Exemplo
🕵️ Fofoquice mainframe
Se você fizer cálculo de dinheiro sem COMP-3, algum sysprog vai te xingar mentalmente.
🔹 COMPUTATIONAL-4 (COMP-4)
O binário antigo / compatível
📌 O que é
-
Número inteiro binário
-
Representação dependente do compilador
-
Hoje é tratado como sinônimo de COMP em muitos ambientes
📦 Armazenamento típico
-
2 bytes → até 4 dígitos
-
4 bytes → até 9 dígitos
-
8 bytes → até 18 dígitos
🧠 Para que serve
-
Contadores
-
Índices
-
Quantidades
-
Performance melhor que COMP-3
🧪 Exemplo
🕵️ Fofoquice mainframe
COMP-4 é aquele tio antigo: funciona, mas ninguém recomenda para sistemas novos.
🔹 COMPUTATIONAL-5 (COMP-5)
O binário moderno e rápido
📌 O que é
-
Binário puro de hardware
-
Totalmente compatível com o processador IBM Z
-
Não depende de PIC decimal
🚀 Performance
-
Mais rápido que COMP e COMP-4
-
Ideal para loops intensivos
🧠 Para que serve
-
Contadores grandes
-
Cálculos inteiros pesados
-
Alto desempenho
🧪 Exemplo
⚠️ Atenção
-
Nunca use para dinheiro
-
Pode gerar resultados inesperados se misturado com decimais
🕵️ Easter-egg
Se você quer performance máxima, COMP-5 é o “turbo mode” do COBOL.
🧾 Comparação rápida (estilo prova)
| Tipo | Formato | Exatidão | Performance | Uso típico |
|---|---|---|---|---|
| COMP-3 | Decimal empacotado | ✅ Exata | Média | Dinheiro |
| COMP-4 | Binário | ❌ Inteiro | Boa | Contadores |
| COMP-5 | Binário nativo | ❌ Inteiro | 🚀 Alta | Loops, índices |
🧠 Regra de ouro Bellacosa
☠️ Erros clássicos (que dão ABEND ou bug fantasma)
-
Usar COMP-5 para valores monetários
-
Somar COMP-3 com COMP-5 sem MOVE intermediário
-
Definir PIC errado para binário
-
Converter automático e confiar “na sorte”
Mini-diagrama COBOL – Tipos Computacionais
| Tipo | Armazenamento | Tamanho típico | Precisão / Uso principal | Observações importantes |
|---|---|---|---|---|
| COMP-1 | Ponto flutuante | 32 bits (4 bytes) | Números reais de precisão simples (float) | Aproximado; cuidado com cálculos monetários |
| COMP-2 | Ponto flutuante | 64 bits (8 bytes) | Números reais de precisão dupla (double float) | Para cálculos científicos ou alta precisão |
| COMP-3 | Decimal empacotado | 1.5 bytes por 3 dígitos | Inteiros ou decimais exatos; usado para dinheiro | Evita erros de arredondamento; mais lento que binário |
| COMP-4 | Binário nativo | 2, 4 ou 8 bytes | Inteiros; compatível com operações de hardware nativo | Dependente do compilador; às vezes usado em sistemas antigos |
| COMP-5 | Binário nativo | 2, 4 ou 8 bytes | Inteiros; compatível com hardware moderno (IEEE) | Mais rápido; ideal para grandes cálculos inteiros |

