-
Title:
07-16 Arithmetic Operations 2
-
Description:
07-16 Arithmetic Operations 2
-
Inicialmente, si compilo y ejecuto el probador, todos
-
estos métodos en realidad están devolviendo ceros. Primero arreglemos
-
el amdahlSpeedup. En este momento, está devolviendo 0.
-
¿Qué pasa si lo escribo de la manera que
-
es? Ahora, si ejecuto el probador
-
de nuevo, obtengo un 2.875 real cuando yo
-
esperaba 1.6. Creo que mejor regreso y lo
-
arreglo. En este momento, esto está haciendo primero las divisiones,
-
así que 1 sobre s y s sobre n.
-
Y después las sumas y restas en medio.
-
Y no hay verdadero sentido de la fracción
-
con la que empezamos. Toda esta parte desde s
-
a n debe permanecer junta en el denominador,
-
y 1 menos s necesita permanecer junta
-
en su numerador. Vamos a intentarlo de nuevo. Muy bien, parece que
-
amdahlSpeedup está trabajando, pero todavía
-
necesitamos hacer el crossRatio. Voy a tratar de
-
hacerlo de esta manera ingenua de nuevo. He escrito esto
-
como parece, pero aplanado en una línea.
-
Así que, si devuelvo esta cantidad y compilo,
-
estoy recibiendo un error, de tipo inesperado, clase requerida, valor
-
encontrado. Este error probablemente no hace mucho
-
sentido para ti todavía, pero esto es un indicio
-
de lo que vendrá. Un par de paréntesis
-
como este inmediatamente seguido por alguna otra cantidad tiene otro significado.
-
En específico, si se pone un tipo aquí en lugar de
-
una expresión como un menos c. Lo que necesito hacer es indicar
-
que quiero multiplicar, y necesito hacerlo
-
aquí también. Y ahora si intento ejecutar
-
el probador de nuevo definitivamente no estoy obteniendo las respuestas correctas para
-
el crossRatio. Esto es porque cuando tenemos un montón de operadores
-
con los mismos precedentes, el viaje solo inicia desde la izquierda
-
y se mueve a la derecha, así que en lugar de calcular un
-
menos c por b menos d, sobre, entre paréntesis b
-
menos c por a menos d. Esto hará un menos c por b menos d dividido entre b
-
menos c y luego multiplicar toda esa cantidad por a
-
menos d. Lo que aquí tengo que hacer, es el agrupar el
-
denominador. También podría agrupar el numerador
-
si en verdad quisiera hacerlo, pero no haría mucha
-
diferencia. Si compilo otra vez, y ejecuto el probador, ahora
-
obtendré dos nuevos métodos que trabajan correctamente. Ahora para el promedio. Yo podría tratar de devolver
-
la suma de todos ellos, todos divididos por cuatro. Veamos
-
como funciona esto. Si ejecuto el probador, parece que funciona en un caso, pero
-
no en el otro. Veamos el segundo
-
caso. Voy a ir a leer en el interior del probador.
-
El caso que no funciona es cuando tratamos
-
de tomar el promedio de 3, 4, 3, y 3.
-
Debemos, de hecho,esperar 3.25, pero parece
-
como que estamos perdiendo el decimal. Java está interpretando esto como
-
división de número entero, porque 4 es un número entero, y a,
-
b, c, y d están declaradas como números enteros. Hay
-
algunas maneras de arreglar esto. Podría escribir 4 como 4. o 4.0, y entonces obtendría
-
aquí la respuesta correcta. O realmente podría cambiar
-
todos estos enteros a los dobles, y entonces en realidad no
-
debería especificar que el 4 era un doble. Puedo
-
compilar esto y ejecutar el probador y aun funciona.
-
Eso es porque si cualquiera de estas variables son un doble,
-
toda esta expresión entre paréntesis saldrá como un
-
doble, y un doble dividido entre un entero no necesita
-
hacerse con una división de número entero, eso necesita una división normal.
-
Esto es una cosa muy fácil de mezclar. Para nosotros
-
se ve bien, pero el equipo va a leer
-
mal y el compilador no te lo advertirá. Cuando ejecutamos
-
esto con todos los números enteros y no dobles vimos que
-
terminó siendo un error de tiempo de ejecución. Esto es
-
un buen ejemplo de por qué es útil pensar acerca de lo que
-
quieres que tu respuesta sea de antemano. Calcula un par
-
de ejemplos y luego escribe tu código. Buen trabajo en este cuestionario.