#include<iostream>
using namespace std;
void cube_root(float x, float x_cube_root,float max_res)
{
float residual,left,right;
if( x>=1)
{ left =1;
right =x;
}
else if(x>=0 && x<1)
{
left = x;
right =1;
}
else if( x>-1 && x<0)
{
left = -1;
right =x;
}
else
{
left =x;
right = -1;
}
do
{
x_cube_root =(left + right)/2;
residual = x - x_cube_root * x_cube_root * x_cube_root;
if (residual >0)
left = x_cube_root;
else
right =x_cube_root;
} while (abs(residual)> max_res);
}
int main()
{
float x,cube_root_x,res;
for(int i=0;i<100;i++)
{
srand(i);
x = rand() %100 * pow(-1,rand()) + float(rand()%1000)/1000 ;
cube_root(x, cube_root_x,0.001);
res= abs( x- cube_root_x * cube_root_x * cube_root_x);
cout<< x <<"cube_root----->"<<cube_root_x<<"residual :"<<res<<endl;
}
return 0;
}