示例#1
0
        /// <summary>
        /// arccos(x)를 반환함
        /// </summary>
        /// <param name="x">-1≤x≤1인 실수</param>

        public static double Acos(double x)
        {
            if (x < -1 || x > 1)
            {
                return(Double.NaN);
            }
            double min = 0, max = Math.PI;
            double mid = Math.PI / 2;
            double cos = Trigonometric.Cos(mid);

            while (max - min >= 1.0 / Int32.MaxValue)
            {
                if (cos < x)
                {
                    max = mid;
                }
                else
                {
                    min = mid;
                }
                mid = (max + min) / 2;
                cos = Trigonometric.Cos(mid);
            }
            return(mid);
        }
示例#2
0
        /// <summary>
        /// arctan(x)를 반환함
        /// </summary>

        public static double Atan(double x)
        {
            if (Double.IsPositiveInfinity(x))
            {
                return(+Math.PI * 0.5);
            }
            if (Double.IsNegativeInfinity(x))
            {
                return(-Math.PI * 0.5);
            }
            double min = -Math.PI * 0.5, max = +Math.PI * 0.5;
            double mid = 0;
            double tan = Trigonometric.Tan(mid);

            while (max - min >= 1.0 / Int32.MaxValue)
            {
                if (tan > x)
                {
                    max = mid;
                }
                else
                {
                    min = mid;
                }
                mid = (max + min) / 2;
                tan = Trigonometric.Tan(mid);
            }
            return(mid);
        }
示例#3
0
        /// <summary>
        /// arcsin(x)를 반환함
        /// </summary>
        /// <param name="x">-1≤x≤1인 실수</param>
        public static double Asin(double x)
        {
            if (x < -1 || x > 1)
            {
                return(Double.NaN);
            }
            double min = -Math.PI * 0.5, max = +Math.PI * 0.5;
            double mid = 0;
            double sin = Trigonometric.Sin(mid);

            while (max - min >= 1.0 / Int32.MaxValue)
            {
                if (sin > x)
                {
                    max = mid;
                }
                else
                {
                    min = mid;
                }
                mid = (max + min) / 2;
                sin = Trigonometric.Sin(mid);
            }
            return(mid);
        }