public void Visit(Compiled.TermPower elem)
            {
                double baseVal  = ValueOf(elem.Base);
                double exponent = ValueOf(elem.Exponent);

                elem.Value            = Math.Pow(baseVal, exponent);
                elem.Inputs[0].Weight = exponent * Math.Pow(baseVal, exponent - 1);
                elem.Inputs[1].Weight = elem.Value * Math.Log(baseVal);
            }
            public void Visit(Compiled.TermPower elem)
            {
                Debug.Assert(ArgumentIndex == 0 || ArgumentIndex == 1);

                if (ArgumentIndex == 0)
                {
                    var exponent = ValueOf(elem.Exponent);
                    LocalDerivative = elem.Adjoint * exponent * Math.Pow(ValueOf(elem.Base), exponent - 1);
                }
                else
                {
                    var baseValue = ValueOf(elem.Base);
                    LocalDerivative = elem.Adjoint * Math.Pow(baseValue, ValueOf(elem.Exponent)) * Math.Log(baseValue);
                }
            }
            public TapeElement  Visit(TermPower power)
            {
                return(Compile(power, () =>
                {
                    var baseElement = power.Base.Accept(this);
                    var expElement = power.Exponent.Accept(this);
                    var element = new Compiled.TermPower
                    {
                        Inputs = MakeInputEdges(() =>
                        {
                            edges.Add(new InputEdge {
                                Element = baseElement
                            });
                            edges.Add(new InputEdge {
                                Element = expElement
                            });
                        }),
                    };

                    return element;
                }));
            }
            public int Visit(TermPower power)
            {
                return(Compile(power, () =>
                {
                    var baseIndex = power.Base.Accept(this);
                    var expIndex = power.Exponent.Accept(this);
                    var element = new Compiled.TermPower
                    {
                        Base = baseIndex,
                        Exponent = expIndex,
                        Inputs = new Compiled.InputEdge[]
                        {
                            new Compiled.InputEdge {
                                Index = baseIndex
                            },
                            new Compiled.InputEdge {
                                Index = expIndex
                            },
                        },
                    };

                    return element;
                }));
            }
 public void Visit(Compiled.TermPower elem)
 {
     elem.Value = Math.Pow(ValueOf(elem.Base), ValueOf(elem.Exponent));
 }