Todo mundo esqueceu Pascal?
1/6rendimentos 0.1666666...(com qualquer precisão suportada).
1 div 6 rendimentos 0
É discutível se a regra C é um erro. Quase todos os operadores aritméticos de C, onde os operandos são do mesmo tipo, produzem um resultado do mesmo tipo. Há algo a ser dito para consistência.
Além disso, como C é direcionado principalmente ao código no nível do sistema, a maioria dos programas em C não usa ponto flutuante. Ao mesmo tempo, adicionar acidentalmente código de ponto flutuante a um programa que não precisava dele poderia ser um problema sério. Provavelmente ainda é esse o caso de pequenos sistemas embarcados - que, novamente, são um grande alvo para C.
Na maioria dos programas C, truncar a divisão inteira provavelmente é exatamente o que você deseja.
Se 1 / 6produziu um resultado de ponto flutuante em C, então:
- Seria uma inconsistência no idioma.
- O padrão teria que fazer uma escolha arbitrária de qual tipo de ponto flutuante usar para o resultado (
doublepode parecer a escolha natural, mas você pode preferir a precisão extra de long double)
- O idioma ainda precisaria ter uma operação para divisão inteira; executar adição de ponto flutuante e, em seguida, truncar provavelmente não seria bom o suficiente.
C poderia ter fornecido operadores separados para os dois tipos de divisão, mas o segundo ponto acima ainda se aplicaria: qual dos três tipos de ponto flutuante seria usado para o resultado? E como é fácil obter a divisão de ponto flutuante, se você precisar (use uma constante de ponto flutuante para um ou ambos os operandos ou converta um ou ambos os operandos para um tipo de ponto flutuante), aparentemente não era ' Não considerou isso importante.
Na versão de 1974 do manual C (quatro anos antes da publicação da primeira edição da K&R), Ritchie nem menciona a possível confusão:
O binário / operador indica divisão. As mesmas considerações de tipo da multiplicação se aplicam
que diz que, se ambos os operandos são do tipo intou char, o resultado é do tipo int.
Sim, é uma fonte de confusão para alguns programadores de C, especialmente iniciantes - mas C não é conhecido por ser muito amigável para iniciantes.