es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Evaluando la raíz cuadrada de un número mayor a 1 con cierta precisión.

Este fue mi código:


#include <stdio.h> float absolute(float x){ return x>0? x: (-1)*x; } float bisect(float a, float b){ float k = (a+b)*0.5; return k; } // Para n>1 float find(float n, float precision){ float l=1,m=n; float sqrt, k=bisect(l,m); while(absolute(k*k-n)>precision){ if(k*k-n>0){ m=k; l=l; k=bisect(l,m); } else if(k*k-n<0){ l=k; m=m; k=bisect(k,m); } } return k; } int main(){ float n, precision; scanf("%f %f", &n, &precision); printf("%f", find(n, precision)); return 0; }

Bueno, me dio la raíz cuadrada correctamente, pero no con la precisión que especifiqué. Por ejemplo, la raíz cuadrada de 3 se dio como 1.734375 y no 1.732050, que es el valor correcto, a pesar de establecer la precisión en 0.001. Pasé casi una hora tratando de depurar esto y ahora estoy terminado. Por favor, ayúdame a identificar dónde salió mal el código. ¡Gracias de antemano!</stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema en el código radica en el uso del operador bitwise ‘>’, que se utiliza en lugar del operador mayor que ‘>’. Esto resulta en una comparación y cálculo incorrectos de la raíz cuadrada.

    Para solucionar esto, todas las ocurrencias de ‘>’ deben reemplazarse por ‘>’. Una vez hecho esto, el código debería funcionar como se espera y calcular la raíz cuadrada con la precisión dada.

    Aquí está el código corregido:

    “`

    include <stdio.h>

    float absolute(float x){
    return x>0? x: (-1)x;
    }
    float bisect(float a, float b){
    float k = (a+b)
    0.5;
    return k;
    }
    //Para n>1
    float find(float n, float precision){
    float l=1,m=n;
    float sqrt, k=bisect(l,m);
    while(absolute(kk-n)>precision){
    if(k
    k-n>0){
    m=k;
    l=l;
    k=bisect(l,m);
    }
    else if(k*k-n<0)
    {l=k;
    m=m;
    k=bisect(k,m);
    }
    }
    return k;
    }
    int main(){
    float n, precision;
    scanf(“%f %f”, &n, &precision);
    printf(“%f”, find(n, precision));
    return 0;
    }
    “`</stdio.h>

Comments are closed.