%mathpiper,def="ArcSinN"


Defun("ArcSinN",{int1})
[
  Local(result,eps);
	Bind(result,FastArcSin(int1));
  Local(x,q,s,c);
  Bind(q,SubtractN(SinN(result),int1));
  Bind(eps,MathIntPower(10,MathNegate(BuiltinPrecisionGet())));
  While(IsGreaterThan(AbsN(q),eps))
  [
	Bind(s,SubtractN(int1,SinN(result)));
    Bind(c,CosN(result));
    Bind(q,DivideN(s,c));
    Bind(result,AddN(result,q));
  ];
  result;
];

/*
ArcSinN(x) :=
[
    FastArcSin(x);
];*/

%/mathpiper




%mathpiper_docs,name="ArcSinN",categories="User Functions;Numeric;Trigonometry (Numeric)"
*CMD ArcSinN --- inverse sine (arbitrary-precision math function)
*CALL
	ArcSinN(x)

*DESC

This command performs the calculation of an elementary mathematical
function.  The arguments <i>must</i> be numbers.  The reason for the
postfix {N} is that the library needs to define equivalent non-numerical
functions for symbolic computations, such as {Exp}, {Sin}, etc.

Note that all xxxN functions accept integers as well as floating-point numbers.
The resulting values may be integers or floats.  If the mathematical result is an
exact integer, then the integer is returned.  For example, {Sqrt(25)} returns
the integer {5}, and {Power(2,3)} returns the integer {8}.  In such cases, the
integer result is returned even if the calculation requires more digits than set by
{BuiltinPrecisionSet}.  However, when the result is mathematically not an integer,
the functions return a floating-point result which is correct only to the current precision.

*E.G.

In> ArcSinN(.5)
Result> 0.5235987756

%/mathpiper_docs