Tengo un par de dudas… No sé si se dan cuenta, pero hay dos márgenes de error. Cuando David hace el print de abs(respuesta**2 - objetivo)...

Pregunta de la clase:
Aproximación de soluciones
Nicolás Peralta Páez

Nicolás Peralta Páez

Pregunta
studenthace 5 años

Tengo un par de dudas…

No sé si se dan cuenta, pero hay dos márgenes de error. Cuando David hace el print de abs(respuesta**2 - objetivo), el print antes de darnos el resultado es, de hecho, mayor que el épsilon elegido (0.01), así que parece que lo que Python dijera es que el resultado es “casi igual” que épsilon y por ende la primera condición While (>=) no se cumple con exactitud, ¿están de acuerdo con eso?

La segunda es que la segunda condición while (valga la redundancia) no sirve tanto para “protegernos de los negativos” (porque para eso usamos una función de valor absoluto) como para evitar que se evalúen valores absolutos donde el “objetivo” es menor que la “respuesta”… como quien dice, solo nos interesan aproximaciones al objetivo por la izquierda y no por la derecha (que lo sobrepasen) porque eso se iría al infinito… Entonces, es de hecho esa segunda condición la que para el ciclo while, porque sumar 0.01 a 1.999… da un número mayor a 2 y por ende el cuadrado de ese número es mayor a 4… Ahí Python para el ciclo while… Luego pasa lo que digo en mi primera inquietud: que Python asume que 0.0100343… es lo suficientemente aproximado a 0.01 como para considerarlo si igual.

Corríjanme si me equivoco, gracias.

3 respuestas
para escribir tu comentario
    Jorge Cruz Perez

    Jorge Cruz Perez

    studenthace 5 años

    anferben, no puedes calcular la raiz cuadrada de un numero negativo, no a menos que entres el el mundo de los numero imaginarios. a menos que digas que quieres calcular las raices negativas, es decir que tu raiz en vez de incrementarse > 0, se decremente, y salva el abs()

    La primera condición se esta cumpliendo, no existe el casi, es decir, sigue verdadera para iterar y de detiene cuando ya no se cumple. La segunda condición mientras sea un numero positivo siempre se cumple y esta de mas, debiera haber un if antes para validar el negativo ya que no tiene raiz cuadrada.

    Es decir David si hizo un análisis de solución con errores por asi decir

    Andrés Fernández

    Andrés Fernández

    studenthace 5 años

    Hola, para la 1era ya te diste cuenta que es porque David hace el print del último valor antes de salir del while, no del valor con el que sale del ciclo.

    Para la 2da lo que sucede es que si objetivo es negativo entonces:

    abs(respuesta**2 - -objetivo)

    Luego, como restar un número negativo equivale a sumar entonces:

    abs(respuesta**2 + objetivo)

    Este último es un número que crece con cada iteración, por lo que siempre será > epsilon y el ciclo while nunca terminará.

    Espero te sea de ayuda! 👍

    Nicolás Peralta Páez

    Nicolás Peralta Páez

    studenthace 5 años

    La respuesta a la pregunta 1 está en el lugar donde se pone el print. Prefiero poner ahora un print antes del while y uno dentro del while al final del ciclo. Así puedo ver el valor que toma la resta dentro del abs al momento exacto en que es menor que 0.01.

Curso de Pensamiento Computacional con Python

Curso de Pensamiento Computacional con Python

Comienza tu camino en el desarrollo de software con el lenguaje de programación Python. Entiende la estructura de pensamiento necesaria para resolver problemas en programación. Domina las estructuras de control para crear soluciones. Conoce las características de Python que te permiten reutilizar código. Prueba tu código e implementa correcciones y mejoras.

Curso de Pensamiento Computacional con Python
Curso de Pensamiento Computacional con Python

Curso de Pensamiento Computacional con Python

Comienza tu camino en el desarrollo de software con el lenguaje de programación Python. Entiende la estructura de pensamiento necesaria para resolver problemas en programación. Domina las estructuras de control para crear soluciones. Conoce las características de Python que te permiten reutilizar código. Prueba tu código e implementa correcciones y mejoras.