The Pow Integer Exponent: Example and Test
Keywords: the pow integer exponent: example test int

| Prev | Next |  |  |  |  |  | pow_int.cpp | Headings

The Pow Integer Exponent: Example and Test
`

    # include <cppad/cppad.hpp>
    # include <cmath>

    bool pow_int(void)
    {	bool ok = true;

    	using CppAD::AD;
    	using CppAD::NearEqual;

    	// declare independent variables and start tape recording
    	size_t n  = 1;
    	double x0 = -0.5;
    	CPPAD_TESTVECTOR(AD<double>) x(n);
    	x[0]      = x0;
    	CppAD::Independent(x);

    	// dependent variable vector
    	size_t m = 7;
    	CPPAD_TESTVECTOR(AD<double>) y(m);
    	int i;
    	for(i = 0; i < int(m); i++)
    		y[i] = CppAD::pow(x[0], i - 3);

    	// create f: x -> y and stop tape recording
    	CppAD::ADFun<double> f(x, y);

    	// check value
    	double check;
    	for(i = 0; i < int(m); i++)
    	{	check = std::pow(x0, double(i - 3));
    		ok &= NearEqual(y[i] , check,  1e-10 , 1e-10);
    	}

    	// forward computation of first partial w.r.t. x[0]
    	CPPAD_TESTVECTOR(double) dx(n);
    	CPPAD_TESTVECTOR(double) dy(m);
    	dx[0] = 1.;
    	dy    = f.Forward(1, dx);
    	for(i = 0; i < int(m); i++)
    	{	check = double(i-3) * std::pow(x0, double(i - 4));
    		ok &= NearEqual(dy[i] , check,  1e-10 , 1e-10);
    	}

    	// reverse computation of derivative of y[i]
    	CPPAD_TESTVECTOR(double)  w(m);
    	CPPAD_TESTVECTOR(double) dw(n);
    	for(i = 0; i < int(m); i++)
    		w[i] = 0.;
    	for(i = 0; i < int(m); i++)
    	{	w[i] = 1.;
    		dw    = f.Reverse(1, w);
    		check = double(i-3) * std::pow(x0, double(i - 4));
    		ok &= NearEqual(dw[0] , check,  1e-10 , 1e-10);
    		w[i] = 0.;
    	}

    	return ok;
    }

`

Input File: example/pow_int.cpp