12. Tipos de dados fundamentais
Sem números mágicos, cuidado com divisão, overflow, comparação de floats e limites de arrays.
Resumo
- Números mágicos viram constantes nomeadas (0 e 1 podem ficar). Cuidado com divisão por zero.
- Inteiros: confira divisão inteira e overflow, inclusive em resultados intermediários.
- Ponto flutuante: não compare com
==; não some números de magnitudes muito diferentes; dinheiro em inteiros/decimal. - Enumerações dão legibilidade e confiabilidade; reserve o 1º valor como inválido; defina primeiro e último.
- Constantes nomeadas = um ponto de controle. Arrays: confira os limites. Crie seus próprios tipos (typedef).
Perguntas-chave
responda de cabeça, depois abraPor que não comparar floats com ==?
Porque erros de arredondamento fazem valores matematicamente iguais terem representações diferentes; compare com uma tolerância.
Como representar valores monetários?
Com inteiros (em centavos), tipos decimais/BCD ou maior precisão, nunca com float simples.
Por que reservar o primeiro valor de uma enumeração como inválido?
Para detectar variáveis não inicializadas, que costumam valer 0.
Exercícios de fixação
0/5 respondidas1.
if (0.1 + 0.2 == 0.3) dá falso em muitas linguagens. O que o capítulo recomenda?2.
if (status == 7) aparece em vários lugares do código. O que fazer?3.
(a * b) / c estoura mesmo quando o resultado final caberia no tipo inteiro. Qual o problema?4.
Somar 0,0001 a 1.000.000.000 em ponto flutuante de precisão simples tende a:
5.
Numa enumeração
Cor { Invalida, Vermelho, Verde, Azul }, por que Invalida primeiro?