10. Fracciones y operaciones con fracciones

Las fracciones representan partes de una unidad y permiten trabajar con proporciones exactas. En programación ayudan a modelar repartos, razones, escalas, porcentajes y cálculos que no siempre conviene reducir a decimales.

10.1 Introducción

Una fracción expresa una relación entre dos números enteros: un numerador y un denominador. El numerador indica cuántas partes tomamos y el denominador indica en cuántas partes iguales se divide la unidad.

En programación muchas veces usamos decimales, pero las fracciones siguen siendo importantes porque permiten razonar con exactitud sobre repartos, proporciones y simplificaciones.

En este tema representaremos fracciones en JavaScript usando objetos con dos propiedades: numerador y denominador.

10.2 Partes de una fracción

Una fracción se escribe como a/b, donde a es el numerador y b es el denominador. El denominador no puede ser cero.

3/4 significa 3 partes de una unidad dividida en 4 partes iguales.
Elemento Significado Ejemplo en 3/4
Numerador Partes que se toman 3
Denominador Partes iguales en que se divide la unidad 4
const fraccion = {
  numerador: 3,
  denominador: 4
};

console.log(fraccion);

10.3 Fracción y valor decimal

Una fracción puede convertirse a decimal dividiendo numerador por denominador. Algunas fracciones producen decimales exactos y otras producen decimales periódicos o aproximados.

const unMedio = 1 / 2;
const unTercio = 1 / 3;
const tresCuartos = 3 / 4;

console.log(unMedio);
console.log(unTercio);
console.log(tresCuartos);

El decimal puede ser útil para calcular, pero la fracción conserva mejor la relación exacta entre las partes.

10.4 Fracciones equivalentes

Dos fracciones son equivalentes si representan la misma cantidad, aunque tengan numeradores y denominadores diferentes.

1/2 = 2/4 = 3/6 = 4/8

Podemos comprobarlo comparando sus valores decimales.

console.log(1 / 2);
console.log(2 / 4);
console.log(3 / 6);
console.log(4 / 8);

10.5 Simplificar fracciones

Simplificar una fracción significa dividir numerador y denominador por el mismo número para obtener una fracción equivalente más simple. Para hacerlo de forma óptima usamos el máximo común divisor.

18/24 se simplifica dividiendo por 6:
18/24 = 3/4
function mcd(a, b) {
  a = Math.abs(a);
  b = Math.abs(b);

  while (b !== 0) {
    const resto = a % b;
    a = b;
    b = resto;
  }

  return a;
}

function simplificar(fraccion) {
  const divisor = mcd(fraccion.numerador, fraccion.denominador);

  return {
    numerador: fraccion.numerador / divisor,
    denominador: fraccion.denominador / divisor
  };
}

console.log(simplificar({ numerador: 18, denominador: 24 }));

10.6 Validar una fracción

Una fracción no puede tener denominador cero. Además, para este curso trabajaremos con numerador y denominador enteros.

function esFraccionValida(fraccion) {
  return Number.isInteger(fraccion.numerador) &&
         Number.isInteger(fraccion.denominador) &&
         fraccion.denominador !== 0;
}

console.log(esFraccionValida({ numerador: 3, denominador: 4 }));
console.log(esFraccionValida({ numerador: 3, denominador: 0 }));
console.log(esFraccionValida({ numerador: 1.5, denominador: 2 }));

Validar antes de calcular evita errores y resultados sin sentido.

10.7 Suma de fracciones con igual denominador

Si dos fracciones tienen el mismo denominador, se suman los numeradores y se conserva el denominador.

1/5 + 2/5 = 3/5
const fraccionA = { numerador: 1, denominador: 5 };
const fraccionB = { numerador: 2, denominador: 5 };

const resultado = {
  numerador: fraccionA.numerador + fraccionB.numerador,
  denominador: fraccionA.denominador
};

console.log(resultado);

10.8 Suma de fracciones con distinto denominador

Si los denominadores son distintos, podemos usar un denominador común. Una forma directa es multiplicar los denominadores.

a/b + c/d = (a × d + c × b) / (b × d)
function sumar(fraccionA, fraccionB) {
  return {
    numerador: fraccionA.numerador * fraccionB.denominador +
               fraccionB.numerador * fraccionA.denominador,
    denominador: fraccionA.denominador * fraccionB.denominador
  };
}

console.log(sumar(
  { numerador: 1, denominador: 2 },
  { numerador: 1, denominador: 3 }
));

El resultado puede simplificarse después para obtener una fracción más reducida.

10.9 Resta de fracciones

La resta de fracciones sigue una regla similar a la suma, pero restando los productos cruzados.

a/b - c/d = (a × d - c × b) / (b × d)
function restar(fraccionA, fraccionB) {
  return {
    numerador: fraccionA.numerador * fraccionB.denominador -
               fraccionB.numerador * fraccionA.denominador,
    denominador: fraccionA.denominador * fraccionB.denominador
  };
}

console.log(restar(
  { numerador: 3, denominador: 4 },
  { numerador: 1, denominador: 2 }
));

10.10 Multiplicación de fracciones

Para multiplicar fracciones, multiplicamos numeradores entre sí y denominadores entre sí.

a/b × c/d = (a × c) / (b × d)
function multiplicar(fraccionA, fraccionB) {
  return {
    numerador: fraccionA.numerador * fraccionB.numerador,
    denominador: fraccionA.denominador * fraccionB.denominador
  };
}

console.log(multiplicar(
  { numerador: 2, denominador: 3 },
  { numerador: 4, denominador: 5 }
));

Esta regla es más directa que la suma y la resta porque no requiere denominador común previo.

10.11 División de fracciones

Para dividir fracciones, multiplicamos la primera por la inversa de la segunda. La inversa se obtiene intercambiando numerador y denominador.

a/b ÷ c/d = a/b × d/c
function dividir(fraccionA, fraccionB) {
  return {
    numerador: fraccionA.numerador * fraccionB.denominador,
    denominador: fraccionA.denominador * fraccionB.numerador
  };
}

console.log(dividir(
  { numerador: 3, denominador: 4 },
  { numerador: 2, denominador: 5 }
));

Al dividir, la segunda fracción no puede tener numerador cero, porque eso produciría una división por cero.

10.12 Operaciones simplificadas

Podemos combinar las operaciones con la función de simplificación para obtener resultados más claros.

function mcd(a, b) {
  a = Math.abs(a);
  b = Math.abs(b);

  while (b !== 0) {
    const resto = a % b;
    a = b;
    b = resto;
  }

  return a;
}

function simplificar(fraccion) {
  const divisor = mcd(fraccion.numerador, fraccion.denominador);

  return {
    numerador: fraccion.numerador / divisor,
    denominador: fraccion.denominador / divisor
  };
}

function sumar(fraccionA, fraccionB) {
  return simplificar({
    numerador: fraccionA.numerador * fraccionB.denominador +
               fraccionB.numerador * fraccionA.denominador,
    denominador: fraccionA.denominador * fraccionB.denominador
  });
}

console.log(sumar(
  { numerador: 1, denominador: 2 },
  { numerador: 1, denominador: 4 }
));

10.13 Aplicación: proporciones exactas

Las fracciones son útiles cuando queremos expresar una proporción sin perder precisión. Por ejemplo, si 2 de cada 5 usuarios completan una acción, podemos representar la proporción como 2/5.

const proporcion = { numerador: 2, denominador: 5 };
const usuarios = 100;
const usuariosQueCompletan = usuarios * proporcion.numerador / proporcion.denominador;

console.log(usuariosQueCompletan);

El cálculo usa la fracción como regla para obtener una parte del total.

10.14 Errores comunes

  • Usar denominador cero. Una fracción con denominador cero no es válida.
  • Sumar denominadores directamente al sumar fracciones con distinto denominador.
  • Olvidar simplificar el resultado cuando se desea una fracción reducida.
  • Confundir el valor decimal aproximado con la fracción exacta.
  • Dividir por una fracción cuyo numerador es cero.
const correcto = {
  numerador: 1 * 3 + 1 * 2,
  denominador: 2 * 3
};

const incorrecto = {
  numerador: 1 + 1,
  denominador: 2 + 3
};

console.log(correcto);
console.log(incorrecto);

10.15 Qué debes recordar de este tema

  • Una fracción tiene numerador y denominador.
  • El denominador nunca puede ser cero.
  • Una fracción puede convertirse a decimal dividiendo numerador por denominador.
  • Para simplificar fracciones se usa el MCD.
  • Para sumar o restar fracciones con distinto denominador se necesita un denominador común.
  • Para multiplicar fracciones se multiplican numeradores y denominadores.
  • Para dividir fracciones se multiplica por la inversa de la segunda.

10.16 Conclusión

Las fracciones permiten representar partes y proporciones de forma precisa. En programación pueden modelarse con estructuras simples y manipularse mediante funciones claras para validar, simplificar y operar.

En el próximo tema estudiaremos números decimales y precisión numérica, un punto clave cuando las fracciones se transforman en valores decimales dentro de la computadora.