예제 #1
0
        /// <summary>
        /// 自然対数の底の指数関数。マクローリン展開の収束半径が∞であることを利用。
        /// </summary>
        /// <param name="val">指数</param>
        /// <returns></returns>
        public double CreateNapierFunc(double val)
        {
            double Val = 0;
            double buf = 0;

            for (int ic = 0; ic < 1000; ic++)
            {
                buf += BinomialTheorem.RealExpo(val, ic) / BinomialTheorem.DoubleFactorial(ic);
            }
            Val = buf;

            return(Val);
        }
예제 #2
0
        /// <summary>
        /// 円周率を求める。
        /// ラマヌジャンの公式を使用
        /// </summary>
        protected static void CreatePI()
        {
            double buf1 = 0;
            double buf2 = 1;
            int    ic   = 0;

            while (buf1 != buf2)
            {
                buf2 = buf1;

                buf1 += (BinomialTheorem.RealExpo(-1, ic) * BinomialTheorem.DoubleFactorial(4 * ic) * (1123 + 21460 * ic))
                        / (BinomialTheorem.RealExpo(882, 2 * ic + 1) * BinomialTheorem.RealExpo(BinomialTheorem.RealExpo(4, ic) * BinomialTheorem.DoubleFactorial(ic), 4));

                ic += 1;
            }
            PI = 4 / buf1;
        }
예제 #3
0
        /// <summary>
        /// ラジアンを入力すると余弦の値を返す。0 <= rad < 2PI
        /// </summary>
        /// <param name="rad"></param>
        /// <returns></returns>
        public static double RadCosine(double rad)
        {
            double Cos = 0;
            double buf = 0;

            if (rad == PI / 2)
            {
                return(0);
            }
            if (rad == PI / 3)
            {
                return(0.5);
            }
            if (rad == 0)
            {
                return(1);
            }
            for (int ic = 0; ic < 100; ic++)
            {
                buf += BinomialTheorem.RealExpo(-1, ic) * BinomialTheorem.RealExpo(rad, 2 * ic) / BinomialTheorem.DoubleFactorial(2 * ic);
            }
            Cos = buf;
            return(Cos);
        }
예제 #4
0
        /// <summary>
        /// ラジアンを入力すると正弦の値を返す。0 <= rad < 2PI
        /// </summary>
        /// <param name="rad">ラジアン</param>
        /// <returns></returns>
        public static double RadSine(double rad)
        {
            double Sine = 0;
            double buf  = 0;

            if (rad == PI / 2)
            {
                return(1);
            }
            if (rad == PI / 6)
            {
                return(0.5);
            }
            if (rad == 0)
            {
                return(0);
            }
            if (Math.Floor(rad % PI) == rad % PI)
            {
                return(0);
            }
            for (int ic = 0; ic < 100; ic++)
            {
                buf += BinomialTheorem.RealExpo(-1, ic) * BinomialTheorem.RealExpo(rad, 2 * ic + 1) / BinomialTheorem.DoubleFactorial(2 * ic + 1);
            }
            Sine = buf;
            return(Sine);
        }