Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
        public override INumber Add(RuntimeData runtime, INumber val)
        {
            AdditionFormula af = new AdditionFormula();

            af.AddItem(runtime, val);
            af.AddItem(runtime, this);
            return(af);
        }
Example #4
0
        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));
        }
Example #5
0
        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);
        }
Example #6
0
 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);
     }
 }
Example #7
0
        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);
        }
Example #8
0
        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);
            }
        }