public override INumber Add(RuntimeData runtime, INumber val) { if (val is AdditionFormula) { var res = this.Clone() as AdditionFormula; res.AddItem(runtime, val); return(res); } // くっつけれるものがあればくっつけて終了 AdditionFormula af = new AdditionFormula(); bool flag = false; for (int i = 0; i < this.items.Count; i++) { if (this.items[i].CanJoin(runtime, val) && !flag) { af.AddItem(runtime, this.items[i].Add(runtime, val)); flag = true; } else { af.AddItem(runtime, this.items[i]); } } // くっつけれなかったらアイテムにぶっ込んで終了 if (!flag) { af.AddItem(runtime, val); } return(af); }
public override INumber Add(RuntimeData runtime, INumber val) { AdditionFormula af = new AdditionFormula(); af.AddItem(runtime, val); af.AddItem(runtime, this); return(af); }
public override INumber Add(RuntimeData runtime, INumber val) { if (val.Pow is Number && (val.Pow as Number).Value == 1) { if (val is Number) { var me = this.Clone() as Fraction; me.Numerator = me.Numerator.Add(runtime, this.Denominator.Multiple(runtime, val)); return(me); } if (val is Fraction) { var me = this.Clone() as Fraction; // 分母が同じ場合は単純に足す if (this.Denominator.Equals(runtime, val)) { var res = new Fraction(this.Denominator, this.Numerator.Add(runtime, (val as Fraction).Numerator)); if (runtime.Setting.DoOptimize) { return(res.Optimise(runtime)); } else { return(res); } } // 違う場合はいろいろやる else { var res = new Fraction( this.Denominator.Multiple(runtime, (val as Fraction).Denominator), this.Numerator.Multiple(runtime, (val as Fraction).Denominator).Add(runtime, this.Denominator.Multiple(runtime, (val as Fraction).Numerator)) ); if (runtime.Setting.DoOptimize) { return(res.Optimise(runtime)); } else { return(res); } } } } else if (val is Number || val is Fraction) { AdditionFormula af = new AdditionFormula(); af.AddItem(runtime, this); af.AddItem(runtime, val); return(af); } return(val.Add(runtime, this)); }
public override INumber Add(RuntimeData runtime, INumber val) { if (this.CanJoin(runtime, val)) { var me = this.Clone() as Variable; me.multi = me.multi.Add(runtime, (val as Variable).multi); return(me); } AdditionFormula af = new AdditionFormula(); af.AddItem(runtime, this); af.AddItem(runtime, val); return(af); }
public override INumber Multiple(RuntimeData runtime, INumber val) { if (val is Number && (val as Number).Value == 1) { return(this.Clone()); } if (val is Number || val is Fraction) { if (this.Pow is Number && (this.Pow as Number).Value == 1) { AdditionFormula aa = new AdditionFormula(); foreach (var item in this.items) { aa.AddItem(runtime, item.Multiple(runtime, val)); } return(aa); } } else { MultipleFormula mf = new MultipleFormula(); mf.AddItem(runtime, this); mf.AddItem(runtime, val); return(mf); } throw new NotImplementedException(); }
public override INumber Add(RuntimeData runtime, INumber val) { if (val is AdditionFormula) { var af = val.Clone() as AdditionFormula; af.AddItem(runtime, this); return(af); } else { AdditionFormula af = new AdditionFormula(); af.AddItem(runtime, val); af.AddItem(runtime, this); return(af); } }
public override INumber Add(RuntimeData runtime, INumber val) { if (val is InfinityValue) { return(val); } if (val is IConstParameter) { var me = this.Clone() as FloatNumber; me.value += (val as IConstParameter).ConstValue; return(me); } AdditionFormula af = new AdditionFormula(); af.AddItem(runtime, val); af.AddItem(runtime, this); return(af); }
public override INumber ExecuteDiff(RuntimeData runtime, string t) { AdditionFormula af = new AdditionFormula(); for (int i = 0; i < this.items.Count; i++) { var res = this.items[i].Eval(runtime).ExecuteDiff(runtime, t); af.AddItem(runtime, res); } var pow = Runtime.Func.Differential.DiffPow(runtime, t, this); if (pow != null) { pow.AddItem(runtime, af); return(pow); } else { return(af); } }