public override INumber ExecuteDiff(RuntimeData runtime, string t) { if (Runtime.Func.Differential.IsConstValue(runtime, this.Denominator)) { var res = this.Numerator.ExecuteDiff(runtime, t); return(res); } else { AdditionFormula af = new Expression.AdditionFormula(); { MultipleFormula mf = new Expression.MultipleFormula(); mf.AddItem(runtime, this.Numerator.ExecuteDiff(runtime, t)); mf.AddItem(runtime, this.Denominator); af.AddItem(runtime, mf); } { MultipleFormula mf = new Expression.MultipleFormula(); mf.AddItem(runtime, Number.New(-1)); mf.AddItem(runtime, this.Denominator.ExecuteDiff(runtime, t)); mf.AddItem(runtime, this.Numerator); af.AddItem(mf); } Fraction f = new Expression.Fraction( this.Denominator.Power(runtime, Number.New(2)), af ); return(f); } }
public INumber ExecuteDiff(RuntimeData runtime, string t, INumber[] parameters) { Fraction res = new Expression.Fraction( new FuncedINumber(runtime.Functions["cos"], parameters), new FuncedINumber(runtime.Functions["sin"], parameters) ); return(res.ExecuteDiff(runtime, t)); }
public override INumber Eval(RuntimeData runtime) { var den = this.Denominator.Eval(runtime); var num = this.Numerator.Eval(runtime); Fraction f = new Expression.Fraction(den, num); if (runtime.Setting.DoOptimize) { return(f.Optimise(runtime)); } else { return(f); } }
public override INumber Multiple(RuntimeData runtime, INumber val) { if (val is Number) { // Powあっても大丈夫 INumber res = new Expression.Fraction( this.Denominator, this.Numerator.Multiple(runtime, val) ); if (runtime.Setting.DoOptimize) { res = res.Optimise(runtime); } return(res); } if (val is Fraction) { INumber res = new Fraction( this.Denominator.Multiple(runtime, (val as Fraction).Denominator), this.Numerator.Multiple(runtime, (val as Fraction).Numerator)); if (runtime.Setting.DoOptimize) { return(res.Optimise(runtime)); } else { return(res); } } // 旧コード 2017/01/12 // return val.Multiple(runtime, this); { var res = this.Clone() as Fraction; res.Numerator = res.Numerator.Multiple(runtime, val); return(res); } }