float arctan(float x){

if( x < 0 ){ return -arctan(-x); }

if( x > 1 ){ return pi/2 - arctan(1/x); }

if( x <= 1/8.0 ){ return 0.9974133042 * x; }

if( x <= 2/8.0 ){ return 0.004072621 + 0.964989344 * x; }

if( x <= 3/8.0 ){ return .017899968 + 0.910336056 * x; }

if( x <= 4/8.0 ){ return .044740546 + 0.839015512 * x; }

if( x <= 5/8.0 ){ return .084473784 + 0.759613648 * x; }

if( x <= 6/8.0 ){ return .134708924 + 0.679214352 * x; }

if( x <= 7/8.0 ){ return .192103293 + 0.602631128 * x; }

if( x <= 8/8.0 ){ return .253371504 + 0.532545304 * x; }

}

float arcsin(float x){

return arctan(x/sqrt(1-x*x));

}

float arccos(float x){

return pi/2 - arcsin(x);

}

if( x < 0 ){ return -arctan(-x); }

if( x > 1 ){ return pi/2 - arctan(1/x); }

if( x <= 1/8.0 ){ return 0.9974133042 * x; }

if( x <= 2/8.0 ){ return 0.004072621 + 0.964989344 * x; }

if( x <= 3/8.0 ){ return .017899968 + 0.910336056 * x; }

if( x <= 4/8.0 ){ return .044740546 + 0.839015512 * x; }

if( x <= 5/8.0 ){ return .084473784 + 0.759613648 * x; }

if( x <= 6/8.0 ){ return .134708924 + 0.679214352 * x; }

if( x <= 7/8.0 ){ return .192103293 + 0.602631128 * x; }

if( x <= 8/8.0 ){ return .253371504 + 0.532545304 * x; }

}

float arcsin(float x){

return arctan(x/sqrt(1-x*x));

}

float arccos(float x){

return pi/2 - arcsin(x);

}