[C con Clase] Dividir correctamente

Salvador Pozo salvador en conclase.net
Jue Mar 8 10:03:32 CET 2012


El pasado 2012-03-08 01:02:53, Ariel escribió:
 
A> Buenas Noches:
A> Seria posible que alguien me explicara como se maneja la division en C, tengo entendido que la division de enteros da como resultado un entero (sin los decimales), pero si que quiero dividir por ejemplo 10/6 el resultado es 1.6.

Hola:

Esto es independiente de la programación en C o en cualquier otro lenguaje, es un tema matemático, que tiene su reflejo en el lenguaje.

En matemáticas se distinguen diferentes conjuntos de números: naturales, enteros, reales, imaginarios...

En cada uno de estos conjuntos se definen algunas operaciones aritméticas que, aunque análogas entre ellas, tienen diferentes definiciones y propiedades en cada conjunto.

En lo que se refiere a la división, dentro del conjunto de los números enteros, el resultado de la división entre dos números es un entero. No hay alternativa.
Por lo tanto si dividimos los enteros 10 y 6, el resultado es 1, y existe un residuo o resto, de valor 4.

Si quieres que el resultado sea un número real (o el subconjunto de ellos que podemos manejar en C: un float, un double o un long double), tendrás que dividir dos números reales.

En C, los conjuntos de números no son exactamente iguales que los matemáticos. Los números naturales o enteros tienen una definición parecida, pero al contrario que en el conjunto matemático, los ordenadores no pueden manejar infinitos números naturales. El dominio de los números, de cualquier conjunto, en C es limitado. Sin embargo, por coherencia, se intenta que las propiedades de cada conjunto sean lo más parecidas posibles al modelo matemático, ya que ese modelo es el que nos permite manejar y simular el mundo real.

En respuesta a tu pregunta, si a y b son dos números enteros, a/b dará como resultado un número entero. Si a y b son números float dará como resultado un float, etc.

También podemos hacer una conversión de tipos:

10/6  -> 1
(float)10/6 -> 1.66666662693023681640625
(double)10/6 -> 1.66666666666666674068153497501

Todas estas divisiones son correctas, si se tiene en cuenta el conjunto en el que están definidas.

Espero haber aclarado algo.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase