#include <iostream>
#include <math.h>
#include <stdio.h>
#include <assert.h>
float raizNR(float x, float epsilon);
/*
// Metodo de Biseccion
float raizBi(float x, float epsilon)
{
assert (x>=0); //asume que x es no negativo
assert (epsilon>0); //asume que espsilon es mayor a cero
float bajo = 0;
int ctr=1;
float alto;
alto = (x,1);
if(x >1){
alto = x;
}
else{
alto = 1;
}
float supuesto = (bajo+alto)/2.0;
while (fabs(pow(supuesto,2)-x) > epsilon && ctr <= 100)
{
printf("%4.10f %4.10f %4.10f \n",bajo,alto,supuesto);
if (pow(supuesto,2) < x)
bajo = supuesto;
else
alto = supuesto;
supuesto = (bajo+alto)/2.0;
ctr += 1;
//assert(ctr <= 100);
}
std::cout << "Iteraciones " << ctr << std::endl;
std::cout << "Estimado " << supuesto << std::endl;
return supuesto;
}
*/
int main(int argc, char **argv)
{
/*
double elev1=pow(2,1000);
//es un número gigante, tienen un formato interno largo.
double elev2=pow(2,999);
double div=elev1/elev2;
std::cout << "elev1 / elev2: div " << std::endl;
printf("%4.12f \n %4.12f \n %4.12f \n",elev1,elev2,div);
*/
/*
double x,y,z;
x = 1.2;
y = 1.1;
z = x * y;
float a,b,c;
a = 1.2;
b = 1.1;
c = a * b;
double f;
f=x*b;
std::cout << "double x double: " << std::endl;
printf("%4.10f %4.10f %4.10f \n",x,y,z);
std::cout << "float x float: " << std::endl;
printf("%4.10f %4.10f %4.10f \n",a,b,c);
std::cout << "double x float: " << std::endl;
printf("%4.10f %4.10f %4.10f \n",x,b,f);
*/
/* double xx=sqrt(2);
if (xx*xx==2.0)
std::cout << "son iguales " << std::endl;
else
printf("%4.17f \n",xx*xx);
*/
/*
double xx=sqrt(2);
float epsilon = 0.0000000001;
if (xx-xx*xx<=epsilon)
std::cout << "son iguales " << std::endl;
else
printf("%4.17f \n",xx*xx);
*/
float resultado = raizNR(0.25,0.0001); //2-4-9
//float resultado=raizNR(16,0.0001);
std::cout << "RESULTADO " << resultado << std::endl;
return 0;
}
//Metodo de Newton Raphson
float raizNR(float x, float epsilon)
{
assert (x>=0); //asume que x es no negativo
assert (epsilon>0); //asume que espsilon es mayor a cero
float dif = 0;
int ctr=1;
float supuesto = x/2.0;
dif = pow(supuesto,2) - x;
printf("%4.10f %4.10f %4.10f \n",supuesto,dif,2.0*supuesto);
while (fabs(dif) > epsilon && ctr <= 100)
{
supuesto = supuesto-dif/(2.0*supuesto);
dif = pow(supuesto,2)-x;
printf("%4.10f %4.10f %4.10f \n",supuesto,dif,2.0*supuesto);
ctr += 1;
assert (ctr<=100);
}
std::cout << std::endl;
std::cout << "Iteraciones " << ctr << std::endl;
std::cout << "Estimado " << supuesto << std::endl;
return supuesto;
}
0 Comentarios