¿Todos han olvidado a Pascal?
1/6rendimientos 0.1666666...(con la precisión que sea compatible).
1 div 6 rendimientos 0
Es discutible si la regla C es un error. Casi todos los operadores aritméticos de C, donde los operandos son del mismo tipo, producen un resultado del mismo tipo. Hay algo que decir por consistencia.
Además, dado que C está dirigido principalmente a código de nivel de sistema, la mayoría de los programas de C no usan punto flotante en absoluto. En un momento, agregar accidentalmente código de punto flotante a un programa que de otro modo no lo necesitaría podría ser un problema grave. Probablemente ese sea el caso para los pequeños sistemas integrados, que, una vez más, son un objetivo importante para C.
En la mayoría de los programas en C, la división de números enteros truncados es probablemente lo que desea de todos modos.
Si 1 / 6arrojó un resultado de coma flotante en C, entonces:
- Sería una inconsistencia en el lenguaje.
- El estándar tendría que hacer una elección arbitraria de qué tipo de punto flotante usar para el resultado (
doublepuede parecer la opción natural, pero es posible que prefiera la precisión adicional de long double)
- El lenguaje aún tendría que tener una operación para la división de enteros; realizar una adición de punto flotante y luego truncarlo probablemente no sería lo suficientemente bueno.
C podría haber proporcionado operadores separados para los dos tipos de división, pero el segundo punto anterior aún se aplicaría: ¿cuál de los tres tipos de coma flotante se usaría para el resultado? Y dado que es bastante fácil obtener una división de punto flotante si la necesita (use una constante de punto flotante para uno o ambos operandos, o convierta uno o ambos operandos en un tipo de punto flotante), aparentemente no era No lo consideró tan importante.
En la versión de 1974 del manual C (4 años antes de la publicación de la primera edición de K&R), Ritchie ni siquiera menciona la posible confusión:
El binario / operador indica división. Se aplican las mismas consideraciones de tipo que para la multiplicación
que dice que si ambos operandos son de tipo into char, el resultado es de tipo int.
Sí, es una fuente de confusión para algunos programadores de C, especialmente para principiantes, pero C no se destaca por ser muy amigable para los novatos.