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)) ...
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