Changeset 1580 for trunk/test_more


Ignore:
Timestamp:
Nov 12, 2009 8:48:27 AM (11 years ago)
Author:
bradbell
Message:

trunk.new: Fix bug when optimizing power function operator.

optimize.cpp: Add test case that demonstrates bug.
optimize.hpp: fix address for primary result of power function operation.
define.hpp: Move macro for Power function primary result here.
pow.hpp: Use new version of macro.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test_more/optimize.cpp

    r1553 r1580  
    198198                return ok;
    199199        }
     200        bool CaseThree(void)
     201        {       // Power function is a special case for optimize
     202                bool ok = true;
     203                using CppAD::AD;
     204                using CppAD::vector;
     205
     206                size_t n = 3;
     207                size_t j;
     208       
     209                vector< AD<double> >    X(n), Y(n);
     210                vector<double>          x(n), y(n);
     211       
     212                for(j = 0; j < n; j++)
     213                        X[j] = x[j] = double(j+1);
     214       
     215                CppAD::Independent(X);
     216                       
     217                Y[0] = pow(X[0], 2.0);
     218                Y[1] = pow(2.0, X[1]);
     219                Y[2] = pow(X[0], X[1]);
     220       
     221                CppAD::ADFun<double> F(X, Y);
     222                F.optimize();
     223                y = F.Forward(0, x);
     224
     225                // Use identically equal because the result of the operations
     226                // have been stored as double and gaurd bits have been dropped.
     227                // (This may not be true for some compiler in the future).
     228                for(j = 0; j < n; j++)
     229                        ok &= ( y[j] == Value(Y[j]) );
     230       
     231                return ok;
     232        }
    200233}
    201234
    202235bool optimize(void)
    203236{       bool ok = true;
     237# if 0
    204238        ok     &= CaseOne();
    205239        ok     &= CaseTwo();
     240# endif
     241        ok     &= CaseThree();
    206242
    207243        return ok;
Note: See TracChangeset for help on using the changeset viewer.