Operações relacionais

Comparação entre valores lógicos

Evite verificar se um booleano é igual a true pois o valor já é uma comparação em si. A verificação de igualdade com o valor false pode ser usada para evitar ter que inverter o valor.

Ruim (comparação com true):

if (Par(n) == true) ...

Bom:

if (Par(n)) ...

Comparação entre ponto flutuantes

Todo ponto flutuante é uma aproximação. Quem precisa de exatidão deve usar inteiros. Ponto flutuantes têm precisão: quanto maior a precisão, mais próximo do valor exato, porém nunca podemos ter certeza de que o valor guardado num ponto flutuante é exatamente determinado valor. Portanto toda vez que vamos comparar ponto flutuantes, existe a possibilidade de erro. Evite comparar equivalência entre ponto flutuantes com os operadores (==, <= e >=).

float a = 16777217; float b = 16777216; if (a == b) // são iguais sim cout << "iguais\n"; else cout << "diferentes\n";

Ao executar o trecho de código acima, seu computador deve dizer que a e b são iguais, quando parecem ser diferentes. Esses valores são aproximadamente iguais e o computador deve usar o mesmo valor do tipo float para representar os dois.

Esses erros de aproximação são especialmente perigosos no controle de repetições. Quantos passos existem de 0.1 a 1 indo de 0.1 em 0.1? Dez? Não de acordo com o seu computador:

int quantasVezesExecutou = 0; for (float x = 0.1f; x <= 1.0f; x += 0.1f) ++quantasVezesExecutou; cout << quantasVezesExecutou << endl; // 9 vezes

Esta página é mantida por Bruno Schneider para a disciplina de IAlg