Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Raiz cuadrada por metodo newton.

Estas en el tema de Raiz cuadrada por metodo newton. en el foro de C/C++ en Foros del Web. Buenas saludos a todos. Estoy aprendiendo c, haciendo ejercicios basicos. Me pidieron que haga la raiz cuadrada por el metodo newton. Realice este algoritmo, funciona ...
  #1 (permalink)  
Antiguo 13/06/2015, 08:19
c64
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 10 años
Puntos: 0
Raiz cuadrada por metodo newton.

Buenas saludos a todos.

Estoy aprendiendo c, haciendo ejercicios basicos. Me pidieron que haga la raiz cuadrada por el metodo newton.

Realice este algoritmo, funciona bien salvo cuando se ingresan valores muy altos en la presicion y la raiz es 5 por ejemplo (en las demas raices funciona bien).

Alguno puede darme una idea de porque es asi?

Código:
#include <stdio.h>
#include <conio.h>
main (){
float n=0,ri=1,error=0,a=10; //inizializa las variables
int v=0; //(ri puede valer cualquier nro)
char C;
printf ("ingresar valor para buscar raiz : ");
scanf ("%f",&n);
printf ("ingresar margen de error (usar punto para los decimales):");
scanf ("%f",&error);
    while (a>=error) {
    v++;
    ri = ( (n/ri) + ri ) / 2; //la formula
    a = (ri*ri) - (n) ; //el cuadrado de la raiz estimada menos el valor ingresado
    a = (a * a) / a;  // hago valor absoluto para a (por las dudas creo que no es necesario)
    printf ("\nLa estimacion es: %10.8f n En %d intentos.\n (en el algoritmo) while:(%10.17f)>=(%10.17f\n\n",ri,v,a,error);

    }
printf ("\n\nLa aproximacion final es: %10.17f\n En %d intentos.\n Con un margen de error de %10.17f\n:",ri,v,error);
getch ();
}
  #2 (permalink)  
Antiguo 13/06/2015, 11:15
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Raiz cuadrada por metodo newton.

El tipo float tiene una precisión aproximada de 6 dígitos... El resto de dígitos menos significativos se consideran basura. El motivo es que la representación decimal no es precisa 100%. Si quieres conseguir más precisión necesitas usar el tipo double.

Si ya necesitas más precisión tendrás que usar librerías externas o currarte un almacenamiento propio con mas precisión.

Un saludo
  #3 (permalink)  
Antiguo 13/06/2015, 12:23
c64
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 10 años
Puntos: 0
Respuesta: Raiz cuadrada por metodo newton.

Cita:
Iniciado por eferion Ver Mensaje
El tipo float tiene una precisión aproximada de 6 dígitos... El resto de dígitos menos significativos se consideran basura. El motivo es que la representación decimal no es precisa 100%. Si quieres conseguir más precisión necesitas usar el tipo double.

Si ya necesitas más precisión tendrás que usar librerías externas o currarte un almacenamiento propio con mas precisión.

Un saludo
Mil gracias quedo un lujo.

Código:
#include <stdio.h>
#include <conio.h>
main (){
float n=0,error=0; //inizializa las variables
double a=999999,ri=1;
int v=0; //(ri puede valer cualquier nro)
printf ("ingresar valor para buscar raiz : ");
scanf ("%f",&n);
printf ("ingresar margen de error (usar punto para los decimales\nEl numero debe ser mayor de 0.00000000000001):");
scanf ("%f",&error);
if (error<0.00000000000001){ // en caso de que el valor ingresado sea menor para el programa
        printf ("para mayor precision hay que hacer otro algoritmo");
    }else{

    while (a>=error) {
    v++;
    ri = ( (n/ri) + ri ) / 2; //la formula
    a = (ri*ri) - (n) ; //el cuadrado de la raiz estimada menos el valor ingresado
    a = (a * a) / a;  // hago valor absoluto para a (por las dudas creo que no es necesario)
    printf ("\nLa estimacion es: %10.8f n En %d intentos.\n(mientras tanto en en el algoritmo(?))\nwhile [(ri*ri) - (n)]=(%10.10f)>=(error)(%10.10f)\n\n",ri,v,a,error);

    }
printf ("\n\nPara la raiz de %f\n La aproximacion final es: %10.18f\n En %d intentos.\n Con un margen de error de %10.17f\n:",n,ri,v,error);
}
getch ();
}

Última edición por c64; 13/06/2015 a las 18:18

Etiquetas: char, cuadrada, ejercicio, funcion, int, metodo, raiz
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:54.