B.5. Forzando la máquina
Por supuesto, aun no hemos terminado. Todavía hemos de implementar la resta sobrecargando sub y la división sobrecargando div .
Una manera de manejar estas operaciones es implementar la negación sobrecargando negó y la inversión sobrecargando invert . Entonces podemos restar negando el segundo operando y sumando, y podemos dividir invirtiendo el segundo operando y multiplicando.
Luego, hemos de suministrar los métodos rsub y rdiv . Desgraciadamente, no podemos usar el mismo truco que usamos para la suma y la multiplicación, porque la resta y la división no son conmutativas. No podemos igualar rsub
y rdiv a sub y div . En estas operaciones, el orden de los operandos tiene importancia.
y rdiv a sub y div . En estas operaciones, el orden de los operandos tiene importancia.
Para manejar la negación unitaria, que es el uso del signo menos con un único operando, sobrecargamos el método neg .
Podemos computar potencias sobrecargando pow , pero la implementación tiene truco. Si el exponente no es un numero entero podría no ser posible representar el resultado como una Fracción. Por ejemplo, Fracción(2) ** Fracción(1,2) es la raíz cuadrada de 2, que es un numero irracional (no se puede representar como una fracción). Por lo tanto, no es fácil escribir la versión mas general de pow .
Existe otra extensión a la clase Fracción que cabr³a considerar. Hasta ahora, hemos asumido que el numerador y el denominador son enteros. Podríamos considerar la posibilidad de perimirles que sean enteros largos.
Como ejercicio, termine la implementación de la clase Fracción de forma que pueda manejar resta, división, exponenciación y enteros largos como numerador y denominador.
Comentarios
Publicar un comentario