public static FInt Asin(FInt F) { bool isNegative = F < 0; F = Abs(F); if (F > FInt.OneF) { throw new ArithmeticException("Bad Asin Input:" + F.ToDouble()); } FInt f1 = mul(mul(mul(mul(FInt.Create(145103 >> FInt.SHIFT_AMOUNT, false), F) - FInt.Create(599880 >> FInt.SHIFT_AMOUNT, false), F) + FInt.Create(1420468 >> FInt.SHIFT_AMOUNT, false), F) - FInt.Create(3592413 >> FInt.SHIFT_AMOUNT, false), F) + FInt.Create(26353447 >> FInt.SHIFT_AMOUNT, false); FInt f2 = PI / FInt.Create(2, true) - (Sqrt(FInt.OneF - F) * f1); return(isNegative ? f2.Inverse : f2); }