Así a bote pronto veo los siguientes errores:
* f2=(-4/x*x) ... "-4" y "x" son enteros, luego la división se va a calcular entre enteros y después ya tocará convertirla a float... pero habrás perdido los decimales.
* (-4/x*x)... esta ecuación es equivalente a (-4/x)*x... es decir -4. El operador de división tiene la misma prioridad que el de multiplicación. Ten cuidado con eso.
* f2=(-4/x*x)+8*x+8*exp(2*x)... el tercer término está mal. La derivada de 3e^(2x) es 2*3e^(2x) = 6e^(2x)
Y ahora las recomendaciones:
* goto fin: procura evitar salvo causas de fuerza mayor el uso de goto. No es necesario salvo para optimización y sólo en momentos muy puntuales. Si te ves obligado a usar un goto es que tu código no está bien escrito.
* variables globales: evita su uso. No son fáciles de usar ni de depurar. Es preferible que tengas funciones con parámetros a usar variables globales.
* Precisión: puedes mejorar la precisión del algoritmo si usas "double" en vez de "float".
Código C++:
Ver original#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i, n;
double x, error, f, f2, xi;
printf("introduzca no de iteraciones: "); printf("El Error debe ser de: ");
for(n=1; n<=i; n++)
{
f
= 4.0*x
*x
+ (4.0/x
) + 3.0*exp(2.0*x
) + 5.222; f2
= 8.0*x
- 4.0/(x
*x
) + 6.0*exp(2.0*x
);
xi = x - (f/f2);
printf("Iteracion actual= %d %lf %lf\n",n
,x
,xi
);
break;
x=xi;
}
printf("\nLa raiz es: %lf \n", xi
); return 0;
}