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.
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.
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s