13/06/2015, 12:23
|
| | Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 10 años Puntos: 0 | |
Respuesta: Raiz cuadrada por metodo newton. Cita:
Iniciado por eferion 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 |