/// <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); }
/// <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; }
/// <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); }
/// <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); }