This is a formula to approximate arcsine(x) using Taylor series from this blog

This is my implementation in C#, I don't know where is the wrong place, the code give wrong result when running: When i = 0, the division will be 1/x. So I assign temp = 1/x at startup. For each iteration, I change "temp" after "i". I use a continual loop until the two next value is very "near" together. When the delta of two next number is very small, I will return the value.
My test case: Input is x =1, so excected arcsin(X) will be arcsin (1) = PI/2 = 1.57079633 rad.
class Arc{
            static double abs(double x)
            {
                return x >= 0 ? x : -x;
            }
            static double pow(double mu, long n)
            {
                double kq = mu;
                for(long i = 2; i<= n; i++)
                {
                    kq *= mu;
                }
                return kq;
            }
            static long  fact(long n)
            {
                long gt = 1;
                for (long i = 2; i <= n; i++) {
                    gt *= i;
                }
                return gt;
            }
            #region arcsin
            static double arcsinX(double x) {
              int i = 0;
              double temp = 0;
              while (true)
               {
               //i++;
               var iFactSquare = fact(i) * fact(i);
               var tempNew = (double)fact(2 * i) / (pow(4, i) * iFactSquare * (2*i+1)) * pow(x, 2 * i + 1) ;
            if (abs(tempNew - temp) < 0.00000001)
            {
                return tempNew;
            }
            temp = tempNew;
            i++;
        }
    }
            public static void Main(){
                Console.WriteLine(arcsin());
                Console.ReadLine();
            }
        }   
 
     
     
     
    