03 · Racionales: productos cruzados y reducción
Racionales: productos cruzados y reducción¶
Trata una fracción como un par de enteros y haz que su valor no dependa del numerador y denominador elegidos.
Ya distingues entre un representante, su clase de equivalencia y una forma normal.
- explicar con tus palabras la definición matemática de «Racionales: productos cruzados y reducción»
- señalar cómo se representa esa definición en datos de Python
- predecir una ejecución pequeña a partir del código real
Con denominadores no nulos, `p/q` y `r/s` son iguales exactamente cuando `p*s=q*r`; así `1/2` y `2/4` tienen el mismo valor.
`Rational` guarda numerador y denominador enteros, comprueba que el segundo no sea cero y usa `reduction()` para elegir una forma legible.
`p/q ~ r/s` → `p * s == q * r` → `Rational.__eq__`
Definición matemática
Definición matemática¶
Con denominadores no nulos, p/q y r/s son iguales exactamente cuando p*s=q*r; así 1/2 y 2/4 tienen el mismo valor.
Representación de datos
Representación de datos¶
Rational guarda numerador y denominador enteros, comprueba que el segundo no sea cero y usa reduction() para elegir una forma legible.
Implementación en Python
Implementación en Python¶
__eq__ multiplica en cruz, __add__ construye un denominador común y la reducción normaliza el signo y divide por el máximo común divisor.
La correspondencia exacta usada en el curso:
Traza de ejecución
Traza de ejecución¶
La comparación baja hasta la multiplicación y la igualdad de enteros, mostrando la reutilización de la torre numérica.
Predice el booleano de igualdad y la forma reducida de `2/4`.
Escribe primero tu predicción y después ejecuta.
Comprobación con pruebas
Comprobación con pruebas¶
Las pruebas comparan fracciones equivalentes, sus hashes y el rechazo del denominador cero.
Alcance y límites
Alcance y límites¶
Los componentes grandes amplifican el coste de los naturales unarios situados debajo.