Exemplo n.º 1
0
 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);
     }
 }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }