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>
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(kk-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>