Codebase list cppad / c035c2f
New upstream version 2017.00.00.4 Barak A. Pearlmutter 7 years ago
19 changed file(s) with 339 addition(s) and 102 deletion(s). Raw diff Collapse all Expand all
1515 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
1616
1717 # cppad_version is used by set_version.sh to get the version number.
18 SET(cppad_version "20170000.3" )
18 SET(cppad_version "20170000.4" )
1919 SET(cppad_url "http://www.coin-or.org/CppAD" )
2020 SET(cppad_description "Differentiation of C++ Algorithms" )
2121
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for cppad 20170000.3.
2 # Generated by GNU Autoconf 2.69 for cppad 20170000.4.
33 #
44 # Report bugs to <cppad@list.coin-or.org>.
55 #
579579 # Identity of this package.
580580 PACKAGE_NAME='cppad'
581581 PACKAGE_TARNAME='cppad'
582 PACKAGE_VERSION='20170000.3'
583 PACKAGE_STRING='cppad 20170000.3'
582 PACKAGE_VERSION='20170000.4'
583 PACKAGE_STRING='cppad 20170000.4'
584584 PACKAGE_BUGREPORT='cppad@list.coin-or.org'
585585 PACKAGE_URL=''
586586
14081408 # Omit some internal or obsolete options to make the list less imposing.
14091409 # This message is too long to be a string in the A/UX 3.1 sh.
14101410 cat <<_ACEOF
1411 \`configure' configures cppad 20170000.3 to adapt to many kinds of systems.
1411 \`configure' configures cppad 20170000.4 to adapt to many kinds of systems.
14121412
14131413 Usage: $0 [OPTION]... [VAR=VALUE]...
14141414
14781478
14791479 if test -n "$ac_init_help"; then
14801480 case $ac_init_help in
1481 short | recursive ) echo "Configuration of cppad 20170000.3:";;
1481 short | recursive ) echo "Configuration of cppad 20170000.4:";;
14821482 esac
14831483 cat <<\_ACEOF
14841484
16121612 test -n "$ac_init_help" && exit $ac_status
16131613 if $ac_init_version; then
16141614 cat <<\_ACEOF
1615 cppad configure 20170000.3
1615 cppad configure 20170000.4
16161616 generated by GNU Autoconf 2.69
16171617
16181618 Copyright (C) 2012 Free Software Foundation, Inc.
22412241 This file contains any messages produced by compilers while
22422242 running configure, to aid debugging if configure makes a mistake.
22432243
2244 It was created by cppad $as_me 20170000.3, which was
2244 It was created by cppad $as_me 20170000.4, which was
22452245 generated by GNU Autoconf 2.69. Invocation command line was
22462246
22472247 $ $0 $@
31313131
31323132 # Define the identity of the package.
31333133 PACKAGE='cppad'
3134 VERSION='20170000.3'
3134 VERSION='20170000.4'
31353135
31363136
31373137 cat >>confdefs.h <<_ACEOF
85718571 # report actual input values of CONFIG_FILES etc. instead of their
85728572 # values after options handling.
85738573 ac_log="
8574 This file was extended by cppad $as_me 20170000.3, which was
8574 This file was extended by cppad $as_me 20170000.4, which was
85758575 generated by GNU Autoconf 2.69. Invocation command line was
85768576
85778577 CONFIG_FILES = $CONFIG_FILES
86288628 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
86298629 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
86308630 ac_cs_version="\\
8631 cppad config.status 20170000.3
8631 cppad config.status 20170000.4
86328632 configured by $0, generated by GNU Autoconf 2.69,
86338633 with options \\"\$ac_cs_config\\"
86348634
1010 dnl
1111 dnl Process this file with autoconf to produce a configure script.
1212 dnl package version bug-report
13 AC_INIT([cppad], [20170000.3], [cppad@list.coin-or.org])
13 AC_INIT([cppad], [20170000.4], [cppad@list.coin-or.org])
1414 AM_SILENT_RULES([yes])
1515
1616 dnl By defalut disable maintainer mode when running configure;
0 // $Id$
10 # ifndef CPPAD_CORE_FORWARD_HPP
21 # define CPPAD_CORE_FORWARD_HPP
32
43 /* --------------------------------------------------------------------------
5 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-16 Bradley M. Bell
4 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-17 Bradley M. Bell
65
76 CppAD is distributed under multiple licenses. This distribution is under
87 the terms of the
128127 // short hand notation for order capacity
129128 size_t C = cap_order_taylor_;
130129
130 // The optimizer may skip a step that does not affect dependent variables.
131 // Initilaizing zero order coefficients avoids following valgrind warning:
132 // "Conditional jump or move depends on uninitialised value(s)".
133 for(j = 0; j < num_var_tape_; j++)
134 { for(k = p; k <= q; k++)
135 taylor_[C * j + k] = CppAD::numeric_limits<Base>::quiet_NaN();
136 }
137
131138 // set Taylor coefficients for independent variables
132139 for(j = 0; j < n; j++)
133140 { CPPAD_ASSERT_UNKNOWN( ind_taddr_[j] < num_var_tape_ );
135142 // ind_taddr_[j] is operator taddr for j-th independent variable
136143 CPPAD_ASSERT_UNKNOWN( play_.GetOp( ind_taddr_[j] ) == local::InvOp );
137144
138 if( p == q )
145 if( p == q )
139146 taylor_[ C * ind_taddr_[j] + q] = xq[j];
140147 else
141148 { for(k = 0; k <= q; k++)
11 # ifndef CPPAD_CORE_ZDOUBLE_HPP
22 # define CPPAD_CORE_ZDOUBLE_HPP
33 /* --------------------------------------------------------------------------
4 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-16 Bradley M. Bell
4 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-17 Bradley M. Bell
55
66 CppAD is distributed under multiple licenses. This distribution is under
77 the terms of the
532532 // maximum finite value
533533 static zdouble max(void)
534534 { return std::numeric_limits<double>::max(); }
535 // quiet_NaN
536 static zdouble quiet_NaN(void)
537 {
538 return zdouble( std::numeric_limits<double>::quiet_NaN() );
539 }
535540 };
536541
537542 } // CPPAD_END_NAMESPACE
8888 size_t i_parent ,
8989 size_t i_arg ,
9090 vector<struct_op_info>& op_info ,
91 sparse_pack& cexp_set )
91 sparse_list& cexp_set )
9292 {
9393 // cexp_set
9494 if( cexp_set.n_set() > 0 )
344344 // comparisons results in the set holds. A set for operator i_op is
345345 // not defined and left empty when op_info[i_op].usage = no_usage.
346346 /// It is also left empty for the result of any VecAD operations.
347 sparse_pack cexp_set;
347 sparse_list cexp_set;
348348 //
349349 // number of sets
350350 size_t num_set = 0;
469469 CPPAD_ASSERT_UNKNOWN( NumRes(op) > 0 );
470470 if( use_result != no_usage )
471471 { CPPAD_ASSERT_UNKNOWN( NumArg(CExpOp) == 6 );
472 addr_t mask[] = {1, 2, 4, 8};
473 for(size_t i = 0; i < 4; i++)
474 { if( arg[1] & mask[i] )
475 { size_t j_op = var2op[ arg[2 + i] ];
476 usage_cexp_parent2arg(
472 // propgate from parent to left argument
473 if( arg[1] & 1 )
474 { size_t j_op = var2op[ arg[2] ];
475 usage_cexp_parent2arg(
476 sum_op, i_op, j_op, op_info, cexp_set
477 );
478 }
479 // propgate from parent to right argument
480 if( arg[1] & 2 )
481 { size_t j_op = var2op[ arg[3] ];
482 usage_cexp_parent2arg(
477483 sum_op, i_op, j_op, op_info, cexp_set
478 );
479 }
480 }
481 // here is where we add elements to cexp_set
482 if( conditional_skip )
483 { bool same_variable = bool(arg[1] & 4) && bool(arg[1] & 8);
484 same_variable &= arg[4] == arg[5];
485 if( ( arg[1] & 4 ) && (! same_variable) )
486 { // arg[4] is a variable
487 size_t j_op = var2op[ arg[4] ];
488 CPPAD_ASSERT_UNKNOWN(op_info[j_op].usage != no_usage);
489 // j_op corresponds to the value used when the
484 );
485 }
486 // are if_true and if_false cases the same variable
487 bool same_variable = bool(arg[1] & 4) && bool(arg[1] & 8);
488 same_variable &= arg[4] == arg[5];
489 //
490 // if_true
491 if( arg[1] & 4 )
492 { size_t j_op = var2op[ arg[4] ];
493 bool can_skip = conditional_skip & (! same_variable);
494 can_skip &= op_info[j_op].usage == no_usage;
495 usage_cexp_parent2arg(
496 sum_op, i_op, j_op, op_info, cexp_set
497 );
498 if( can_skip )
499 { // j_op corresponds to the value used when the
490500 // comparison result is true. It can be skipped when
491501 // the comparison is false (0).
492502 size_t element = 2 * cexp_index + 0;
493503 cexp_set.add_element(j_op, element);
504 //
505 op_info[j_op].usage = yes_usage;
494506 }
495 if( ( arg[1] & 8 ) && (! same_variable) )
496 { // arg[5] is a variable
497 size_t j_op = var2op[ arg[5] ];
498 CPPAD_ASSERT_UNKNOWN(op_info[j_op].usage != no_usage);
499 // j_op corresponds to the value used when the
507 }
508 //
509 // if_false
510 if( arg[1] & 8 )
511 { size_t j_op = var2op[ arg[5] ];
512 bool can_skip = conditional_skip & (! same_variable);
513 can_skip &= op_info[j_op].usage == no_usage;
514 usage_cexp_parent2arg(
515 sum_op, i_op, j_op, op_info, cexp_set
516 );
517 if( can_skip )
518 { // j_op corresponds to the value used when the
500519 // comparison result is false. It can be skipped when
501 // the comparison is true (1).
520 // the comparison is true (0).
502521 size_t element = 2 * cexp_index + 1;
503522 cexp_set.add_element(j_op, element);
523 //
524 op_info[j_op].usage = yes_usage;
504525 }
505526 }
506527 }
640661 break; // -----------------------------------------------------
641662
642663 // =============================================================
643 // cumuilative summation operator
664 // cumulative summation operator
644665 // ============================================================
645666 case CSumOp:
646667 CPPAD_ASSERT_UNKNOWN( NumRes(op) == 1 );
676697 CPPAD_ASSERT_UNKNOWN(op_info[last_user_i_op].usage==no_usage);
677698 # ifndef NDEBUG
678699 if( cexp_set.n_set() > 0 )
679 { sparse_pack_const_iterator itr(cexp_set, last_user_i_op);
700 { sparse_list_const_iterator itr(cexp_set, last_user_i_op);
680701 CPPAD_ASSERT_UNKNOWN( *itr == cexp_set.end() );
681702 }
682703 # endif
10231044 keep &= op_info[i_op].usage != csum_usage;
10241045 keep &= op_info[i_op].previous == 0;
10251046 if( keep )
1026 { sparse_pack_const_iterator itr(cexp_set, i_op);
1047 { sparse_list_const_iterator itr(cexp_set, i_op);
10271048 if( *itr != cexp_set.end() )
10281049 { if( op_info[i_op].op == UserOp )
10291050 { // i_op is the first operations in this user atomic call.
174174
175175 \return
176176 If zero, niether set is a subset of the other.
177 If one, then set one is a subset of set two.
178 If two, then set two is a subset of set one.
179 If the two sets are equal, the value two is returned; i.e., the set
180 in the other object is identified as a subset of the set in this object.
177 If one, then the two sets are equal.
178 If two, then set one is a subset of set two and not equal set two.
179 If three, then set two is a subset of set one and not equal set one..
181180 */
182181 size_t is_subset(
183182 size_t one_this ,
191190 // start
192191 size_t start_one = start_[one_this];
193192 size_t start_two = other.start_[two_other];
193 //
194 if( start_one == 0 )
195 { // set one is empty
196 if( start_two == 0 )
197 { // set two is empty
198 return 1;
199 }
200 return 2;
201 }
194202 if( start_two == 0 )
195 return 2;
196 if( start_one == 0 )
197 return 1;
203 { // set two is empty and one is not empty
204 return 3;
205 }
198206 //
199207 // next
200208 size_t next_one = data_[start_one].next;
206214 //
207215 bool one_subset = true;
208216 bool two_subset = true;
209
217 //
210218 size_t value_union = std::min(value_one, value_two);
211219 while( (one_subset | two_subset) & (value_union < end_) )
212220 { if( value_one > value_union )
229237 }
230238 value_union = std::min(value_one, value_two);
231239 }
240 if( one_subset )
241 { if( two_subset )
242 { // sets are equal
243 return 1;
244 }
245 // one is a subset of two
246 return 2;
247 }
232248 if( two_subset )
233 return 2;
234 if( one_subset )
235 return 1;
249 { // two is a subset of one
250 return 3;
251 }
252 //
253 // neither is a subset
236254 return 0;
237255 }
238256 // -----------------------------------------------------------------
662680 size_t subset = is_subset(this_left, other_right, other);
663681
664682 // case where right is a subset of left or right and left are equal
665 if( subset == 2 )
683 if( subset == 1 || subset == 3 )
666684 { assignment(this_target, this_left, *this);
667685 return;
668686 }
669687 // case where the left is a subset of right and they are not equal
670 if( subset == 1 )
688 if( subset == 2 )
671689 { assignment(this_target, other_right, other);
672690 return;
673691 }
751769 if( data_not_used_ > data_.size() / 2 )
752770 collect_garbage();
753771 //
772 }
773 // -----------------------------------------------------------------
774 /*! Assign a set equal to the intersection of two other sets.
775
776 \param this_target
777 is the index in this sparse_list object of the set being assinged.
778
779 \param this_left
780 is the index in this sparse_list object of the
781 left operand for the intersection operation.
782 It is OK for this_target and this_left to be the same value.
783
784 \param other_right
785 is the index in the other sparse_list object of the
786 right operand for the intersection operation.
787 It is OK for this_target and other_right to be the same value.
788
789 \param other
790 is the other sparse_list object (which may be the same as this
791 sparse_list object).
792 */
793 void binary_intersection(
794 size_t this_target ,
795 size_t this_left ,
796 size_t other_right ,
797 const sparse_list& other )
798 {
799 CPPAD_ASSERT_UNKNOWN( this_target < start_.size() );
800 CPPAD_ASSERT_UNKNOWN( this_left < start_.size() );
801 CPPAD_ASSERT_UNKNOWN( other_right < other.start_.size() );
802 CPPAD_ASSERT_UNKNOWN( end_ == other.end_ );
803 //
804 // check if one of the two operands is a subset of the the other
805 size_t subset = is_subset(this_left, other_right, other);
806
807 // case where left is a subset of right or left and right are equal
808 if( subset == 1 || subset == 2 )
809 { assignment(this_target, this_left, *this);
810 return;
811 }
812 // case where the right is a subset of left and they are not equal
813 if( subset == 3 )
814 { assignment(this_target, other_right, other);
815 return;
816 }
817 // if niether case holds, then both left and right are non-empty
818 CPPAD_ASSERT_UNKNOWN( reference_count(this_left) > 0 );
819 CPPAD_ASSERT_UNKNOWN( other.reference_count(other_right) > 0 );
820
821 // must get all the start indices before modify start_this
822 // (incase start_this is the same as start_left or start_right)
823 size_t start_target = start_[this_target];
824 size_t start_left = start_[this_left];
825 size_t start_right = other.start_[other_right];
826
827
828 // number of list elements that will be deleted by this operation
829 size_t number_delete = 0;
830 size_t ref_count = reference_count(this_target);
831 if( ref_count == 1 )
832 number_delete = number_elements(this_target) + 1;
833 else if (ref_count > 1 )
834 { // decrement reference counter
835 CPPAD_ASSERT_UNKNOWN( data_[start_target].value > 1 )
836 data_[start_target].value--;
837 }
838
839 // start the new list as emptyh
840 size_t start = 0;
841 size_t next = start;
842 start_[this_target] = start;
843
844 // next for left and right lists
845 size_t next_left = data_[start_left].next;
846 size_t next_right = other.data_[start_right].next;
847
848 // value for left and right sets
849 size_t value_left = data_[next_left].value;
850 size_t value_right = other.data_[next_right].value;
851
852 CPPAD_ASSERT_UNKNOWN( value_left < end_ && value_right < end_ );
853 while( (value_left < end_) & (value_right < end_) )
854 { if( value_left == value_right )
855 { if( start == 0 )
856 { // this is the first element in the intersection
857 start = data_.extend(1);
858 next = start;
859 start_[this_target] = start;
860 data_[start].value = 1; // reference count
861 CPPAD_ASSERT_UNKNOWN( start > 0 );
862 }
863 size_t tmp = data_.extend(1);
864 data_[next].next = tmp;
865 next = tmp;
866 data_[next].value = value_left;
867 //
868 // advance left to its next element
869 next_left = data_[next_left].next;
870 if( next_left == 0 )
871 value_left = end_;
872 else
873 value_left = data_[next_left].value;
874 //
875 }
876 if( value_left > value_right )
877 { // advance right
878 next_right = other.data_[next_right].next;
879 if( next_right == 0 )
880 value_right = end_;
881 else
882 value_right = other.data_[next_right].value;
883 }
884 if( value_right > value_left )
885 { // advance left
886 next_left = data_[next_left].next;
887 if( next_left == 0 )
888 value_left = end_;
889 else
890 value_left = data_[next_left].value;
891 }
892 }
893 if( start != 0 )
894 { CPPAD_ASSERT_UNKNOWN( next != 0 );
895 data_[next].next = 0;
896 }
897
898 // adjust data_not_used_
899 data_not_used_ += number_delete;
900 //
901 if( data_not_used_ > data_.size() / 2 )
902 collect_garbage();
754903 }
755904 // -----------------------------------------------------------------
756905 /*! Fetch n_set for vector of sets object.
6363 onmouseover='MouseOver(1)'
6464 onmouseout='MouseOut(1)'
6565 ><img src='_close.gif' name='folder1' align='middle' />
66 <u>cppad-20170000.3: A Package for Differentiation of C++ Algorithms</u></a>
66 <u>cppad-20170000.4: A Package for Differentiation of C++ Algorithms</u></a>
6767
6868 <span id='children1'>
69 <br/><a href="cppad.xml" target="_top">cppad-20170000.3: A Package for Differentiation of C++ Algorithms</a>
69 <br/><a href="cppad.xml" target="_top">cppad-20170000.4: A Package for Differentiation of C++ Algorithms</a>
7070
7171 <br/>&#xA0;&#xA0;&#xA0;&#xA0;<a href="_contents_xml.htm" target="_top">Table of Contents</a>
7272
171171
172172 <tr valign="top"><td><a href="http://www.coin-or.org/download/source/CppAD/" target="_top">http://www.coin-or.org/download/source/CppAD/</a></td><td><a href="whats_new_09.xml#06-25" target="_top">whats_new_09#06-25</a></td></tr>
173173
174 <tr valign="top"><td><a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.epl.tgz" target="_top">http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.epl.tgz</a></td><td><a href="download.xml#Current Version.Compressed Archives" target="_top">download#Current Version.Compressed Archives</a></td></tr>
175
176 <tr valign="top"><td><a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.gpl.tgz" target="_top">http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.gpl.tgz</a></td><td><a href="download.xml#Current Version.Compressed Archives" target="_top">download#Current Version.Compressed Archives</a></td></tr>
174 <tr valign="top"><td><a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.epl.tgz" target="_top">http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.epl.tgz</a></td><td><a href="download.xml#Current Version.Compressed Archives" target="_top">download#Current Version.Compressed Archives</a></td></tr>
175
176 <tr valign="top"><td><a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.gpl.tgz" target="_top">http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.gpl.tgz</a></td><td><a href="download.xml#Current Version.Compressed Archives" target="_top">download#Current Version.Compressed Archives</a></td></tr>
177177
178178 <tr valign="top"><td><a href="http://www.coin-or.org/foundation.html" target="_top">http://www.coin-or.org/foundation.html</a></td><td><a href="cppad.xml#Introduction" target="_top">CppAD#Introduction</a></td></tr>
179179
11821182 &#160;&#160;&#160;<a href="simple_ad_bthread.cpp.xml" target="_top">A&#xA0;Simple&#xA0;Boost&#xA0;Threading&#xA0;AD:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
11831183 &#160;&#160;&#160;<a href="simple_ad_openmp.cpp.xml" target="_top">A&#xA0;Simple&#xA0;OpenMP&#xA0;AD:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
11841184 &#160;&#160;&#160;<a href="introduction.xml" target="_top">An&#xA0;Introduction&#xA0;by&#xA0;Example&#xA0;to&#xA0;Algorithmic&#xA0;Differentiation</a><br/>
1185 &#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1185 &#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
11861186 ADFun&#160;<a href="comparechange.xml" target="_top">Comparison&#xA0;Changes&#xA0;During&#xA0;Zero&#xA0;Order&#xA0;Forward&#xA0;Mode</a><br/>
11871187 &#160;&#160;&#160;&#160;&#160;&#160;<a href="compare_change.xml" target="_top">Comparison&#xA0;Changes&#xA0;Between&#xA0;Taping&#xA0;and&#xA0;Zero&#xA0;Order&#xA0;Forward</a><br/>
11881188 &#160;&#160;&#160;&#160;&#160;&#160;<a href="dependent.xml" target="_top">Stop&#xA0;Recording&#xA0;and&#xA0;Store&#xA0;Operation&#xA0;Sequence</a><br/>
14361436 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="forsparsehes.xml#Algorithm" target="_top">Hessian&#xA0;Sparsity&#xA0;Pattern:&#xA0;Forward&#xA0;Mode:&#160;Algorithm</a><br/>
14371437 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="exp_eps.xml" target="_top">An&#xA0;Epsilon&#xA0;Accurate&#xA0;Exponential&#xA0;Approximation</a><br/>
14381438 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="exp_2.xml" target="_top">Second&#xA0;Order&#xA0;Exponential&#xA0;Approximation</a><br/>
1439 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1439 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
14401440 algorithm<b>:</b>&#160;<a href="conj_grad.cpp.xml" target="_top">Differentiate&#xA0;Conjugate&#xA0;Gradient&#xA0;Algorithm:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
14411441 algorithmic&#160;<a href="ad_in_c.cpp.xml" target="_top">Example&#xA0;and&#xA0;Test&#xA0;Linking&#xA0;CppAD&#xA0;to&#xA0;Languages&#xA0;Other&#xA0;than&#xA0;C++</a><br/>
14421442 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="introduction.xml#Preface.Algorithmic Differentiation" target="_top">An&#xA0;Introduction&#xA0;by&#xA0;Example&#xA0;to&#xA0;Algorithmic&#xA0;Differentiation:&#160;Preface.Algorithmic&#xA0;Differentiation</a><br/>
14431443 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="introduction.xml" target="_top">An&#xA0;Introduction&#xA0;by&#xA0;Example&#xA0;to&#xA0;Algorithmic&#xA0;Differentiation</a><br/>
1444 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1445 algorithms&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1444 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1445 algorithms&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
14461446 alignment&#160;<a href="ta_create_array.xml#Alignment" target="_top">Allocate&#xA0;An&#xA0;Array&#xA0;and&#xA0;Call&#xA0;Default&#xA0;Constructor&#xA0;for&#xA0;its&#xA0;Elements:&#160;Alignment</a><br/>
14471447 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="ta_get_memory.xml#Alignment" target="_top">Get&#xA0;At&#xA0;Least&#xA0;A&#xA0;Specified&#xA0;Amount&#xA0;of&#xA0;Memory:&#160;Alignment</a><br/>
14481448 all&#160;<a href="listallexamples.xml" target="_top">List&#xA0;of&#xA0;All&#xA0;the&#xA0;CppAD&#xA0;Examples</a><br/>
16931693 atomic<b>_</b>user&#160;<a href="atomic_ctor.xml#atomic_user" target="_top">Atomic&#xA0;Function&#xA0;Constructor:&#160;atomic_user</a><br/>
16941694 auto&#160;<a href="auto_tools.xml" target="_top">Auto&#xA0;Tools&#xA0;Unix&#xA0;Test&#xA0;and&#xA0;Installation</a><br/>
16951695 automatic&#160;<a href="ad_in_c.cpp.xml" target="_top">Example&#xA0;and&#xA0;Test&#xA0;Linking&#xA0;CppAD&#xA0;to&#xA0;Languages&#xA0;Other&#xA0;than&#xA0;C++</a><br/>
1696 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1696 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
16971697 available&#160;<a href="memory_leak.xml#available" target="_top">Memory&#xA0;Leak&#xA0;Detection:&#160;available</a><br/>
16981698 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="omp_delete_array.xml" target="_top">Return&#xA0;A&#xA0;Raw&#xA0;Array&#xA0;to&#xA0;The&#xA0;Available&#xA0;Memory&#xA0;for&#xA0;a&#xA0;Thread</a><br/>
16991699 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="omp_available.xml" target="_top">Amount&#xA0;of&#xA0;Memory&#xA0;Available&#xA0;for&#xA0;Quick&#xA0;Use&#xA0;by&#xA0;a&#xA0;Thread</a><br/>
18401840 C&#160;<a href="interface2c.cpp.xml" target="_top">Interfacing&#xA0;to&#xA0;C:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
18411841 &#160;&#160;<a href="ad_in_c.cpp.xml" target="_top">Example&#xA0;and&#xA0;Test&#xA0;Linking&#xA0;CppAD&#xA0;to&#xA0;Languages&#xA0;Other&#xA0;than&#xA0;C++</a><br/>
18421842 &#160;&#160;&#160;&#160;&#160;compare<b>&#xA0;</b>speed<b>&#xA0;</b>with<b>&#xA0;</b>C<b>++</b>&#160;<a href="compare_c.xml" target="_top">Compare&#xA0;Speed&#xA0;of&#xA0;C&#xA0;and&#xA0;C++</a><br/>
1843 C<b>++</b>&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1843 C<b>++</b>&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
18441844 &#160;&#160;&#160;&#160;&#160;compare<b>&#xA0;</b>speed<b>&#xA0;</b>with<b>&#xA0;</b>C&#160;<a href="compare_c.xml" target="_top">Compare&#xA0;Speed&#xA0;of&#xA0;C&#xA0;and&#xA0;C++</a><br/>
18451845 CheckNumericType&#160;<a href="checknumerictype.xml" target="_top">Check&#xA0;NumericType&#xA0;Class&#xA0;Concept</a><br/>
18461846 CheckSimpleVector&#160;<a href="checksimplevector.xml" target="_top">Check&#xA0;Simple&#xA0;Vector&#xA0;Concept</a><br/>
18631863 CppAD&#160;<a href="vector_bool.cpp.xml" target="_top">CppAD::vectorBool&#xA0;Class:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
18641864 &#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad_vector.cpp.xml" target="_top">CppAD::vector&#xA0;Template&#xA0;Class:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
18651865 &#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad_vector.xml" target="_top">The&#xA0;CppAD::vector&#xA0;Template&#xA0;Class</a><br/>
1866 &#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1866 &#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
18671867 CppADTrackDelVec&#160;<a href="tracknewdel.xml" target="_top">Routines&#xA0;That&#xA0;Track&#xA0;Use&#xA0;of&#xA0;New&#xA0;and&#xA0;Delete</a><br/>
18681868 CppADTrackExtend&#160;<a href="tracknewdel.xml" target="_top">Routines&#xA0;That&#xA0;Track&#xA0;Use&#xA0;of&#xA0;New&#xA0;and&#xA0;Delete</a><br/>
18691869 CppADTrackNewVec&#160;<a href="tracknewdel.xml" target="_top">Routines&#xA0;That&#xA0;Track&#xA0;Use&#xA0;of&#xA0;New&#xA0;and&#xA0;Delete</a><br/>
18781878 &#160;&#160;&#160;&#160;<a href="bib.xml#The C++ Programming Language" target="_top">Bibliography:&#160;The&#xA0;C++&#xA0;Programming&#xA0;Language</a><br/>
18791879 &#160;&#160;&#160;&#160;<a href="ad_in_c.cpp.xml" target="_top">Example&#xA0;and&#xA0;Test&#xA0;Linking&#xA0;CppAD&#xA0;to&#xA0;Languages&#xA0;Other&#xA0;than&#xA0;C++</a><br/>
18801880 &#160;&#160;&#160;&#160;<a href="utility.xml#C++ Concepts" target="_top">Some&#xA0;General&#xA0;Purpose&#xA0;Utilities:&#160;C++&#xA0;Concepts</a><br/>
1881 &#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
1881 &#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
18821882 c<b>++</b>11&#160;<a href="cmake.xml#cppad_cxx_flags.C++11" target="_top">Using&#xA0;CMake&#xA0;to&#xA0;Configure&#xA0;CppAD:&#160;cppad_cxx_flags.C++11</a><br/>
18831883 c<b>:</b>&#160;<a href="interface2c.cpp.xml" target="_top">Interfacing&#xA0;to&#xA0;C:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
18841884 calculating&#160;<a href="sparse.xml" target="_top">Calculating&#xA0;Sparsity&#xA0;Patterns</a><br/>
23632363 &#160;&#160;&#160;&#160;&#160;&#160;<a href="cmake.xml" target="_top">Using&#xA0;CMake&#xA0;to&#xA0;Configure&#xA0;CppAD</a><br/>
23642364 &#160;&#160;&#160;&#160;&#160;&#160;<a href="download.xml" target="_top">Download&#xA0;The&#xA0;CppAD&#xA0;Source&#xA0;Code</a><br/>
23652365 &#160;&#160;&#160;&#160;&#160;&#160;<a href="install.xml" target="_top">CppAD&#xA0;Download,&#xA0;Test,&#xA0;and&#xA0;Install&#xA0;Instructions</a><br/>
2366 cppad<b>-</b>20170000<b>.</b>3<b>:</b>&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
2367 cppad<b>.</b>hpp&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
2366 cppad<b>-</b>20170000<b>.</b>4<b>:</b>&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
2367 cppad<b>.</b>hpp&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
23682368 cppad<b>::</b>numeric<b>_</b>limits&#160;<a href="base_limits.xml#CppAD::numeric_limits" target="_top">Base&#xA0;Type&#xA0;Requirements&#xA0;for&#xA0;Numeric&#xA0;Limits:&#160;CppAD::numeric_limits</a><br/>
23692369 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="numeric_limits.xml#CppAD::numeric_limits" target="_top">Numeric&#xA0;Limits&#xA0;For&#xA0;an&#xA0;AD&#xA0;and&#xA0;Base&#xA0;Types:&#160;CppAD::numeric_limits</a><br/>
23702370 cppad<b>::</b>vector&#160;<a href="test_vector.xml#CppAD::vector" target="_top">Choosing&#xA0;The&#xA0;Vector&#xA0;Testing&#xA0;Template&#xA0;Class:&#160;CppAD::vector</a><br/>
26202620 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="exp_2_for2.xml#Operation Sequence.Derivative" target="_top">exp_2:&#xA0;Second&#xA0;Order&#xA0;Forward&#xA0;Mode:&#160;Operation&#xA0;Sequence.Derivative</a><br/>
26212621 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="exp_2_for1.xml#Operation Sequence.Derivative" target="_top">exp_2:&#xA0;First&#xA0;Order&#xA0;Forward&#xA0;Mode:&#160;Operation&#xA0;Sequence.Derivative</a><br/>
26222622 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="get_started.cpp.xml#Derivative" target="_top">Getting&#xA0;Started&#xA0;Using&#xA0;CppAD&#xA0;to&#xA0;Compute&#xA0;Derivatives:&#160;Derivative</a><br/>
2623 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
2623 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
26242624 derivative<b>:</b>&#160;<a href="revone.xml" target="_top">First&#xA0;Order&#xA0;Derivative:&#xA0;Driver&#xA0;Routine</a><br/>
26252625 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="forone.xml" target="_top">First&#xA0;Order&#xA0;Partial&#xA0;Derivative:&#xA0;Driver&#xA0;Routine</a><br/>
26262626 derivatives&#160;<a href="old_usead_2.cpp.xml" target="_top">Using&#xA0;AD&#xA0;to&#xA0;Compute&#xA0;Atomic&#xA0;Function&#xA0;Derivatives</a><br/>
27362736 differentiation&#160;<a href="ad_in_c.cpp.xml" target="_top">Example&#xA0;and&#xA0;Test&#xA0;Linking&#xA0;CppAD&#xA0;to&#xA0;Languages&#xA0;Other&#xA0;than&#xA0;C++</a><br/>
27372737 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="introduction.xml#Preface.Algorithmic Differentiation" target="_top">An&#xA0;Introduction&#xA0;by&#xA0;Example&#xA0;to&#xA0;Algorithmic&#xA0;Differentiation:&#160;Preface.Algorithmic&#xA0;Differentiation</a><br/>
27382738 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="introduction.xml" target="_top">An&#xA0;Introduction&#xA0;by&#xA0;Example&#xA0;to&#xA0;Algorithmic&#xA0;Differentiation</a><br/>
2739 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
2740 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
2739 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
2740 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
27412741 dimension&#160;<a href="rombergmul.xml" target="_top">Multi-dimensional&#xA0;Romberg&#xA0;Integration</a><br/>
27422742 dimensional&#160;<a href="rombergmul.cpp.xml" target="_top">One&#xA0;Dimensional&#xA0;Romberg&#xA0;Integration:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
27432743 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="rombergmul.xml" target="_top">Multi-dimensional&#xA0;Romberg&#xA0;Integration</a><br/>
34083408 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="colpack_hes.cpp.xml" target="_top">Using&#xA0;ColPack:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
34093409 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="colpack_jac.cpp.xml" target="_top">Using&#xA0;ColPack:&#xA0;Example&#xA0;and&#xA0;Test</a><br/>
34103410 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="colpack_prefix.xml#Example" target="_top">Including&#xA0;the&#xA0;ColPack&#xA0;Sparsity&#xA0;Calculations:&#160;Example</a><br/>
3411 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Example" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Example</a><br/>
3411 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Example" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Example</a><br/>
34123412 examples&#160;<a href="speed_example.cpp.xml" target="_top">Run&#xA0;the&#xA0;Speed&#xA0;Examples</a><br/>
34133413 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="example.cpp.xml" target="_top">CppAD&#xA0;Examples&#xA0;and&#xA0;Tests</a><br/>
34143414 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="listallexamples.xml" target="_top">List&#xA0;of&#xA0;All&#xA0;the&#xA0;CppAD&#xA0;Examples</a><br/>
36933693 &#160;&#160;&#160;&#160;&#160;<a href="check_for_nan.xml#get_check_for_nan.file" target="_top">Check&#xA0;an&#xA0;ADFun&#xA0;Object&#xA0;For&#xA0;Nan&#xA0;Results:&#160;get_check_for_nan.file</a><br/>
36943694 &#160;&#160;&#160;&#160;&#160;<a href="base_alloc.hpp.xml#Include File" target="_top">Example&#xA0;AD&lt;Base&gt;&#xA0;Where&#xA0;Base&#xA0;Constructor&#xA0;Allocates&#xA0;Memory:&#160;Include&#xA0;File</a><br/>
36953695 &#160;&#160;&#160;&#160;&#160;<a href="download.xml#Windows File Extraction and Testing" target="_top">Download&#xA0;The&#xA0;CppAD&#xA0;Source&#xA0;Code:&#160;Windows&#xA0;File&#xA0;Extraction&#xA0;and&#xA0;Testing</a><br/>
3696 &#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Include File" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Include&#xA0;File</a><br/>
3696 &#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Include File" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Include&#xA0;File</a><br/>
36973697 file<b>_</b>name&#160;<a href="check_for_nan.xml#Error Message.file_name" target="_top">Check&#xA0;an&#xA0;ADFun&#xA0;Object&#xA0;For&#xA0;Nan&#xA0;Results:&#160;Error&#xA0;Message.file_name</a><br/>
36983698 files&#160;<a href="addon.xml#Library Files" target="_top">CppAD&#xA0;Addons:&#160;Library&#xA0;Files</a><br/>
36993699 &#160;&#160;&#160;&#160;&#160;&#160;<a href="addon.xml#Include Files" target="_top">CppAD&#xA0;Addons:&#160;Include&#xA0;Files</a><br/>
43484348 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="exp_eps.xml#include" target="_top">An&#xA0;Epsilon&#xA0;Accurate&#xA0;Exponential&#xA0;Approximation:&#160;include</a><br/>
43494349 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="exp_2.xml#include" target="_top">Second&#xA0;Order&#xA0;Exponential&#xA0;Approximation:&#160;include</a><br/>
43504350 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cmake.xml" target="_top">Using&#xA0;CMake&#xA0;to&#xA0;Configure&#xA0;CppAD</a><br/>
4351 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Include File" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Include&#xA0;File</a><br/>
4351 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Include File" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Include&#xA0;File</a><br/>
43524352 including&#160;<a href="sacado_prefix.xml" target="_top">Including&#xA0;the&#xA0;Sacado&#xA0;Speed&#xA0;Tests</a><br/>
43534353 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="ipopt_prefix.xml" target="_top">Including&#xA0;the&#xA0;cppad_ipopt&#xA0;Library&#xA0;and&#xA0;Tests</a><br/>
43544354 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="fadbad_prefix.xml" target="_top">Including&#xA0;the&#xA0;FADBAD&#xA0;Speed&#xA0;Tests</a><br/>
45074507 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="example.xml#Introduction" target="_top">Examples:&#160;Introduction</a><br/>
45084508 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="exp_apx_main.cpp.xml" target="_top">Correctness&#xA0;Tests&#xA0;For&#xA0;Exponential&#xA0;Approximation&#xA0;in&#xA0;Introduction</a><br/>
45094509 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="introduction.xml" target="_top">An&#xA0;Introduction&#xA0;by&#xA0;Example&#xA0;to&#xA0;Algorithmic&#xA0;Differentiation</a><br/>
4510 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Introduction" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Introduction</a><br/>
4510 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Introduction" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Introduction</a><br/>
45114511 inuse&#160;<a href="memory_leak.xml#inuse" target="_top">Memory&#xA0;Leak&#xA0;Detection:&#160;inuse</a><br/>
45124512 &#160;&#160;&#160;&#160;&#160;&#160;<a href="omp_inuse.xml" target="_top">Amount&#xA0;of&#xA0;Memory&#xA0;a&#xA0;Thread&#xA0;is&#xA0;Currently&#xA0;Using</a><br/>
45134513 &#160;&#160;&#160;&#160;&#160;&#160;<a href="ta_inuse.xml" target="_top">Amount&#xA0;of&#xA0;Memory&#xA0;a&#xA0;Thread&#xA0;is&#xA0;Currently&#xA0;Using</a><br/>
52255225 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad_ipopt_nlp.xml#cppad_ipopt namespace" target="_top">Nonlinear&#xA0;Programming&#xA0;Using&#xA0;the&#xA0;CppAD&#xA0;Interface&#xA0;to&#xA0;Ipopt:&#160;cppad_ipopt&#xA0;namespace</a><br/>
52265226 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="faq.xml#Namespace" target="_top">Frequently&#xA0;Asked&#xA0;Questions&#xA0;and&#xA0;Answers:&#160;Namespace</a><br/>
52275227 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad_eigen.hpp.xml#CppAD Namespace" target="_top">Enable&#xA0;Use&#xA0;of&#xA0;Eigen&#xA0;Linear&#xA0;Algebra&#xA0;Package&#xA0;with&#xA0;CppAD:&#160;CppAD&#xA0;Namespace</a><br/>
5228 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Namespace" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Namespace</a><br/>
5228 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Namespace" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Namespace</a><br/>
52295229 nan&#160;<a href="zdouble.xml#Syntax.Nan" target="_top">zdouble:&#xA0;An&#xA0;AD&#xA0;Base&#xA0;Type&#xA0;With&#xA0;Absolute&#xA0;Zero:&#160;Syntax.Nan</a><br/>
52305230 &#160;&#160;&#160;&#160;<a href="ode_err_control.cpp.xml#Nan" target="_top">OdeErrControl:&#xA0;Example&#xA0;and&#xA0;Test:&#160;Nan</a><br/>
52315231 &#160;&#160;&#160;&#160;<a href="odeerrcontrol.xml#Method.Nan" target="_top">An&#xA0;Error&#xA0;Controller&#xA0;for&#xA0;ODE&#xA0;Solvers:&#160;Method.Nan</a><br/>
57515751 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="speed.xml" target="_top">Speed&#xA0;Test&#xA0;an&#xA0;Operator&#xA0;Overloading&#xA0;AD&#xA0;Package</a><br/>
57525752 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad_eigen.hpp.xml" target="_top">Enable&#xA0;Use&#xA0;of&#xA0;Eigen&#xA0;Linear&#xA0;Algebra&#xA0;Package&#xA0;with&#xA0;CppAD</a><br/>
57535753 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cmake.xml" target="_top">Using&#xA0;CMake&#xA0;to&#xA0;Configure&#xA0;CppAD</a><br/>
5754 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
5754 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
57555755 package<b>_</b>prefix&#160;<a href="cmake.xml#package_prefix" target="_top">Using&#xA0;CMake&#xA0;to&#xA0;Configure&#xA0;CppAD:&#160;package_prefix</a><br/>
57565756 parallel&#160;<a href="old_atomic.xml#afun.Parallel Mode" target="_top">User&#xA0;Defined&#xA0;Atomic&#xA0;AD&#xA0;Functions:&#160;afun.Parallel&#xA0;Mode</a><br/>
57575757 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="omp_in_parallel.xml" target="_top">Is&#xA0;The&#xA0;Current&#xA0;Execution&#xA0;in&#xA0;OpenMP&#xA0;Parallel&#xA0;Mode</a><br/>
58895889 preprocessor&#160;<a href="addon.xml#Preprocessor Symbols" target="_top">CppAD&#xA0;Addons:&#160;Preprocessor&#xA0;Symbols</a><br/>
58905890 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="faq.xml#Namespace.Test Vector Preprocessor Symbol" target="_top">Frequently&#xA0;Asked&#xA0;Questions&#xA0;and&#xA0;Answers:&#160;Namespace.Test&#xA0;Vector&#xA0;Preprocessor&#xA0;Symbol</a><br/>
58915891 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="preprocessor.xml" target="_top">CppAD&#xA0;API&#xA0;Preprocessor&#xA0;Symbols</a><br/>
5892 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Preprocessor Symbols" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Preprocessor&#xA0;Symbols</a><br/>
5892 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Preprocessor Symbols" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Preprocessor&#xA0;Symbols</a><br/>
58935893 previous&#160;<a href="whats_new.xml#Previous Years" target="_top">Changes&#xA0;and&#xA0;Additions&#xA0;to&#xA0;CppAD:&#160;Previous&#xA0;Years</a><br/>
58945894 previously&#160;<a href="tracknewdel.xml#TrackCount.Previously Deprecated" target="_top">Routines&#xA0;That&#xA0;Track&#xA0;Use&#xA0;of&#xA0;New&#xA0;and&#xA0;Delete:&#160;TrackCount.Previously&#xA0;Deprecated</a><br/>
58955895 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="tracknewdel.xml#TrackExtend.Previously Deprecated" target="_top">Routines&#xA0;That&#xA0;Track&#xA0;Use&#xA0;of&#xA0;New&#xA0;and&#xA0;Delete:&#160;TrackExtend.Previously&#xA0;Deprecated</a><br/>
73657365 symbol&#160;<a href="faq.xml#Namespace.Test Vector Preprocessor Symbol" target="_top">Frequently&#xA0;Asked&#xA0;Questions&#xA0;and&#xA0;Answers:&#160;Namespace.Test&#xA0;Vector&#xA0;Preprocessor&#xA0;Symbol</a><br/>
73667366 symbols&#160;<a href="addon.xml#Preprocessor Symbols" target="_top">CppAD&#xA0;Addons:&#160;Preprocessor&#xA0;Symbols</a><br/>
73677367 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="preprocessor.xml" target="_top">CppAD&#xA0;API&#xA0;Preprocessor&#xA0;Symbols</a><br/>
7368 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Preprocessor Symbols" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Preprocessor&#xA0;Symbols</a><br/>
7368 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Preprocessor Symbols" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Preprocessor&#xA0;Symbols</a><br/>
73697369 syntax&#160;<a href="luratio.xml#Syntax" target="_top">LU&#xA0;Factorization&#xA0;of&#xA0;A&#xA0;Square&#xA0;Matrix&#xA0;and&#xA0;Stability&#xA0;Calculation:&#160;Syntax</a><br/>
73707370 &#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="opt_val_hes.xml#Syntax" target="_top">Jacobian&#xA0;and&#xA0;Hessian&#xA0;of&#xA0;Optimal&#xA0;Values:&#160;Syntax</a><br/>
73717371 &#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="benderquad.xml#Syntax" target="_top">Computing&#xA0;Jacobian&#xA0;and&#xA0;Hessian&#xA0;of&#xA0;Bender's&#xA0;Reduced&#xA0;Objective:&#160;Syntax</a><br/>
75707570 &#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="get_eigen.sh.xml#Syntax" target="_top">Download&#xA0;and&#xA0;Install&#xA0;Eigen&#xA0;in&#xA0;Build&#xA0;Directory:&#160;Syntax</a><br/>
75717571 &#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="get_colpack.sh.xml#Syntax" target="_top">Download&#xA0;and&#xA0;Install&#xA0;ColPack&#xA0;in&#xA0;Build&#xA0;Directory:&#160;Syntax</a><br/>
75727572 &#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="get_adolc.sh.xml#Syntax" target="_top">Download&#xA0;and&#xA0;Install&#xA0;Adolc&#xA0;in&#xA0;Build&#xA0;Directory:&#160;Syntax</a><br/>
7573 &#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Syntax" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Syntax</a><br/>
7573 &#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml#Syntax" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms:&#160;Syntax</a><br/>
75747574 systems&#160;<a href="elapsed_seconds.xml#Microsoft Systems" target="_top">Returns&#xA0;Elapsed&#xA0;Number&#xA0;of&#xA0;Seconds:&#160;Microsoft&#xA0;Systems</a><br/>
75757575
75767576 <b><big><a name="T">T</a></big></b>
86348634 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="atomic_afun.xml" target="_top">Using&#xA0;AD&#xA0;Version&#xA0;of&#xA0;Atomic&#xA0;Function</a><br/>
86358635 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="discrete.xml#Create AD Version" target="_top">Discrete&#xA0;AD&#xA0;Functions:&#160;Create&#xA0;AD&#xA0;Version</a><br/>
86368636 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="download.xml#Current Version" target="_top">Download&#xA0;The&#xA0;CppAD&#xA0;Source&#xA0;Code:&#160;Current&#xA0;Version</a><br/>
8637 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.3:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
8637 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="cppad.xml" target="_top">cppad-20170000.4:&#xA0;A&#xA0;Package&#xA0;for&#xA0;Differentiation&#xA0;of&#xA0;C++&#xA0;Algorithms</a><br/>
86388638 version<b>)</b>&#160;<a href="double_mat_mul.cpp.xml" target="_top">CppAD&#xA0;Speed:&#xA0;Matrix&#xA0;Multiplication&#xA0;(Double&#xA0;Version)</a><br/>
86398639 versions&#160;<a href="download.xml#Daily Versions" target="_top">Download&#xA0;The&#xA0;CppAD&#xA0;Source&#xA0;Code:&#160;Daily&#xA0;Versions</a><br/>
86408640 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="download.xml#Monthly Versions" target="_top">Download&#xA0;The&#xA0;CppAD&#xA0;Source&#xA0;Code:&#160;Monthly&#xA0;Versions</a><br/>
244244 <a href="cos.cpp.xml" target="_top">cos.cpp</a><br/> </td><td> The AD cos Function: Example and Test </td></tr><tr valign="top"><td>
245245 <a href="cosh.xml" target="_top">cosh</a><br/> </td><td> The Hyperbolic Cosine Function: cosh </td></tr><tr valign="top"><td>
246246 <a href="cosh.cpp.xml" target="_top">cosh.cpp</a><br/> </td><td> The AD cosh Function: Example and Test </td></tr><tr valign="top"><td>
247 <a href="cppad.xml" target="_top">CppAD</a><br/> </td><td> cppad-20170000.3: A Package for Differentiation of C++ Algorithms </td></tr><tr valign="top"><td>
247 <a href="cppad.xml" target="_top">CppAD</a><br/> </td><td> cppad-20170000.4: A Package for Differentiation of C++ Algorithms </td></tr><tr valign="top"><td>
248248 <a href="cppad_assert.xml" target="_top">cppad_assert</a><br/> </td><td> CppAD Assertions During Execution </td></tr><tr valign="top"><td>
249249 <a href="cppad_det_lu.cpp.xml" target="_top">cppad_det_lu.cpp</a><br/> </td><td> CppAD Speed: Gradient of Determinant Using Lu Factorization </td></tr><tr valign="top"><td>
250250 <a href="cppad_det_minor.cpp.xml" target="_top">cppad_det_minor.cpp</a><br/> </td><td> CppAD Speed: Gradient of Determinant by Minor Expansion </td></tr><tr valign="top"><td>
22 // ------------------------------------------------------------
33 Keyword =
44 [
5 'CppAD cppad-20170000.3: A Package for Differentiation of C++ Algorithms ',' algorithmic automatic derivative version cppad.hpp syntax introduction example include file preprocessor symbols namespace ',
5 'CppAD cppad-20170000.4: A Package for Differentiation of C++ Algorithms ',' algorithmic automatic derivative version cppad.hpp syntax introduction example include file preprocessor symbols namespace ',
66 'Install CppAD Download, Test, and Install Instructions ',' step 1: 2: cmake 3: check 4: installation ',
77 'download Download The CppAD Source Code ',' purpose distribution directory compressed archives current version subversion git release versions coin github monthly daily windows file extraction testing install instructions no documentation building ',
88 'cmake Using CMake to Configure CppAD ',' makefile install prefix postfix include directories lib datadir documentation package compile flags profile maximum number threads sparsity internal structure vector sets memory usage tape implicit explicit the program command build directory check cmake_verbose_makefile generator cppad_prefix cppad_postfix cmake_install_includedirs cmake_install_libdirs cmake_install_datadir cmake_install_docdir package_prefix cppad_cxx_flags c++11 cppad_profile_flag eigen fadbad cppad_testvector cppad_max_num_threads cppad_tape_id_type cstdint cppad_tape_addr_type cppad_deprecated ',
276276
277277 <span style="font-style: italic"><span style="color: #9A1900">// compare reverse mode results</span></span>
278278 <span style="font-weight: bold"><span style="color: #000000">CPPAD_TESTVECTOR</span></span><span style="color: #990000">(</span><span style="color: #009900">double</span><span style="color: #990000">)</span> <span style="font-weight: bold"><span style="color: #000000">w</span></span><span style="color: #990000">(</span>m<span style="color: #990000">*(</span>q<span style="color: #990000">+</span><span style="color: #993399">1</span><span style="color: #990000">)),</span> <span style="font-weight: bold"><span style="color: #000000">dw_not</span></span><span style="color: #990000">(</span>n<span style="color: #990000">*(</span>q<span style="color: #990000">+</span><span style="color: #993399">1</span><span style="color: #990000">)),</span> <span style="font-weight: bold"><span style="color: #000000">dw_yes</span></span><span style="color: #990000">(</span>n<span style="color: #990000">*(</span>q<span style="color: #990000">+</span><span style="color: #993399">1</span><span style="color: #990000">));</span>
279 <span style="font-weight: bold"><span style="color: #0000FF">for</span></span><span style="color: #990000">(</span>i <span style="color: #990000">=</span> <span style="color: #993399">0</span><span style="color: #990000">;</span> i <span style="color: #990000">&lt;</span> m <span style="color: #990000">*</span> <span style="color: #990000">(</span>q <span style="color: #990000">+</span> <span style="color: #993399">1</span><span style="color: #990000">);</span> i<span style="color: #990000">++)</span>
280 w<span style="color: #990000">[</span>i<span style="color: #990000">]</span> <span style="color: #990000">=</span> <span style="color: #009900">double</span><span style="color: #990000">(</span> <span style="color: #993399">1.0</span> <span style="color: #990000">/</span> <span style="color: #009900">double</span><span style="color: #990000">(</span>i <span style="color: #990000">+</span> <span style="color: #993399">1.0</span><span style="color: #990000">)</span> <span style="color: #990000">);</span>
279281 dw_not <span style="color: #990000">=</span> check_not<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">Reverse</span></span><span style="color: #990000">(</span>q<span style="color: #990000">+</span><span style="color: #993399">1</span><span style="color: #990000">,</span> w<span style="color: #990000">);</span>
280282 dw_yes <span style="color: #990000">=</span> check_yes<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">Reverse</span></span><span style="color: #990000">(</span>q<span style="color: #990000">+</span><span style="color: #993399">1</span><span style="color: #990000">,</span> w<span style="color: #990000">);</span>
281283 <span style="font-weight: bold"><span style="color: #0000FF">for</span></span><span style="color: #990000">(</span>j <span style="color: #990000">=</span> <span style="color: #993399">0</span><span style="color: #990000">;</span> j <span style="color: #990000">&lt;</span> n<span style="color: #990000">;</span> j<span style="color: #990000">++)</span>
302304 r_not <span style="color: #990000">=</span> check_not<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">RevSparseJac</span></span><span style="color: #990000">(</span>m<span style="color: #990000">,</span> s<span style="color: #990000">);</span>
303305 r_yes <span style="color: #990000">=</span> check_yes<span style="color: #990000">.</span><span style="font-weight: bold"><span style="color: #000000">RevSparseJac</span></span><span style="color: #990000">(</span>m<span style="color: #990000">,</span> s<span style="color: #990000">);</span>
304306 <span style="font-weight: bold"><span style="color: #0000FF">for</span></span><span style="color: #990000">(</span>i <span style="color: #990000">=</span> <span style="color: #993399">0</span><span style="color: #990000">;</span> i <span style="color: #990000">&lt;</span> m<span style="color: #990000">;</span> i<span style="color: #990000">++)</span>
305 ok <span style="color: #990000">&amp;=</span> s_not<span style="color: #990000">[</span>i<span style="color: #990000">]</span> <span style="color: #990000">==</span> s_yes<span style="color: #990000">[</span>i<span style="color: #990000">];</span>
307 ok <span style="color: #990000">&amp;=</span> r_not<span style="color: #990000">[</span>i<span style="color: #990000">]</span> <span style="color: #990000">==</span> r_yes<span style="color: #990000">[</span>i<span style="color: #990000">];</span>
306308
307309
308310 <span style="font-style: italic"><span style="color: #9A1900">// compare reverse mode Hessian sparsity patterns</span></span>
22 xmlns:math='http://www.w3.org/1998/Math/MathML'
33 >
44 <head>
5 <title>cppad-20170000.3: A Package for Differentiation of C++ Algorithms</title>
5 <title>cppad-20170000.4: A Package for Differentiation of C++ Algorithms</title>
66 <meta http-equiv='Content-Type' content='text/html' charset='utf-8'/>
7 <meta name="description" id="description" content="cppad-20170000.3: A Package for Differentiation of C++ Algorithms"/>
8 <meta name="keywords" id="keywords" content=" cppad-20170000.3: package differentiation c++ algorithms Ad algorithmic automatic C++ algorithm derivative Cppad version cppad.hpp syntax introduction example include file preprocessor symbols namespace "/>
7 <meta name="description" id="description" content="cppad-20170000.4: A Package for Differentiation of C++ Algorithms"/>
8 <meta name="keywords" id="keywords" content=" cppad-20170000.4: package differentiation c++ algorithms Ad algorithmic automatic C++ algorithm derivative Cppad version cppad.hpp syntax introduction example include file preprocessor symbols namespace "/>
99 <style type='text/css'>
1010 body { color : black }
1111 body { background-color : white }
7070 ,
7171
7272
73 <center><b><big><big>cppad-20170000.3: A Package for Differentiation of C++ Algorithms</big></big></b></center>
73 <center><b><big><big>cppad-20170000.4: A Package for Differentiation of C++ Algorithms</big></big></b></center>
7474 <br/>
7575 <b><big><a name="Syntax" id="Syntax">Syntax</a></big></b>
7676
168168
169169 current </td><td align='left' valign='top'>
170170 EPL </td><td align='left' valign='top'>
171 <a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.epl.tgz" target="_top"><span style='white-space: nowrap'>cppad-20170000.3.epl.tgz</span></a>
171 <a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.epl.tgz" target="_top"><span style='white-space: nowrap'>cppad-20170000.4.epl.tgz</span></a>
172172
173173 </td></tr><tr><td align='left' valign='top'>
174174
175175 current </td><td align='left' valign='top'>
176176 GPL </td><td align='left' valign='top'>
177 <a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.gpl.tgz" target="_top"><span style='white-space: nowrap'>cppad-20170000.3.gpl.tgz</span></a>
177 <a href="http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.gpl.tgz" target="_top"><span style='white-space: nowrap'>cppad-20170000.4.gpl.tgz</span></a>
178178
179179 </td></tr>
180180 </table>
8989
9090 $comment bin/version assumes that : follows cppad version number here$$
9191 $section
92 cppad-20170000.3: A Package for Differentiation of C++ Algorithms
92 cppad-20170000.4: A Package for Differentiation of C++ Algorithms
9393 $$
9494 $mindex AD algorithmic differentiation automatic C++ algorithm derivative CppAD version cppad.hpp$$
9595
0 // $Id: checkpoint.cpp 3853 2016-12-14 14:40:11Z bradbell $
10 /* --------------------------------------------------------------------------
2 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-16 Bradley M. Bell
1 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-17 Bradley M. Bell
32
43 CppAD is distributed under multiple licenses. This distribution is under
54 the terms of the
131130
132131 // compare reverse mode results
133132 CPPAD_TESTVECTOR(double) w(m*(q+1)), dw_not(n*(q+1)), dw_yes(n*(q+1));
133 for(i = 0; i < m * (q + 1); i++)
134 w[i] = double( 1.0 / double(i + 1.0) );
134135 dw_not = check_not.Reverse(q+1, w);
135136 dw_yes = check_yes.Reverse(q+1, w);
136137 for(j = 0; j < n; j++)
157158 r_not = check_not.RevSparseJac(m, s);
158159 r_yes = check_yes.RevSparseJac(m, s);
159160 for(i = 0; i < m; i++)
160 ok &= s_not[i] == s_yes[i];
161 ok &= r_not[i] == r_yes[i];
161162
162163
163164 // compare reverse mode Hessian sparsity patterns
9494 $bold version$$ $pre $$ $cnext $bold license$$ $pre $$ $cnext $bold link$$
9595 $rnext
9696 current $cnext EPL $cnext $href%
97 http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.epl.tgz%
98 cppad-20170000.3.epl.tgz%$$
97 http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.epl.tgz%
98 cppad-20170000.4.epl.tgz%$$
9999 $rnext
100100 current $cnext GPL $cnext $href%
101 http://www.coin-or.org/download/source/CppAD/cppad-20170000.3.gpl.tgz%
102 cppad-20170000.3.gpl.tgz%$$
101 http://www.coin-or.org/download/source/CppAD/cppad-20170000.4.gpl.tgz%
102 cppad-20170000.4.gpl.tgz%$$
103103 $tend
104104
105105 $subhead Subversion$$
19191919 ok &= NearEqual(y[0], 6.0 * x[0], eps10, eps10);
19201920 ok &= NearEqual(y[1], 9.0 * x[1], eps10, eps10);
19211921
1922 return ok;
1923 }
1924
1925 // Test case where if_false case is not used by conditional expression
1926 // but is use after conditional expression.
1927 // (bug fixed 2017-04-02)
1928 bool cond_exp_if_false_used_after(void)
1929 { bool ok = true;
1930 using CppAD::vector;
1931 using CppAD::AD;
1932 using CppAD::NearEqual;
1933 double eps10 = 10.0 * std::numeric_limits<double>::epsilon();
1934
1935 vector< AD<double> > ax(2), ay(1);
1936 ax[0] = 1.0;
1937 ax[1] = 2.0;
1938 Independent(ax);
1939 //
1940 AD<double> left = ax[0];
1941 AD<double> right = ax[1];
1942 AD<double> if_true = ax[0] + ax[0];
1943 AD<double> if_false = ax[1] + ax[1];
1944 //
1945 AD<double> cexp = CondExpLt(left, right, if_true, if_false);
1946 ay[0] = cexp + if_false;
1947 CppAD::ADFun<double> f(ax, ay);
1948 //
1949 if( conditional_skip_ )
1950 f.optimize();
1951 else
1952 f.optimize("no_conditional_skip");
1953 //
1954 // check case where x[0] < x[1]
1955 vector<double> x(2), y(1);
1956 x[0] = 2.0;
1957 x[1] = 4.0;
1958 y = f.Forward(0, x);
1959 ok &= NearEqual(y[0], x[0] + x[0] + x[1] + x[1], eps10, eps10);
1960 ok &= f.number_skip() == 0;
1961 //
1962 // check case where x[0] >= x[1] (if_true is not used)
1963 x[0] = 4.0;
1964 x[1] = 2.0;
1965 y = f.Forward(0, x);
1966 ok &= NearEqual(y[0], x[1] + x[1] + x[1] + x[1], eps10, eps10);
1967 if( conditional_skip_ )
1968 ok &= f.number_skip() == 1;
1969 else
1970 ok &= f.number_skip() == 0;
1971 //
19221972 return ok;
19231973 }
19241974 }
19972047 // check case were a variable in left or right expressions
19982048 // is removed during the optimization
19992049 ok &= cond_exp_skip_remove_var();
2050 // check case where an if case is used after the conditional expression
2051 ok &= cond_exp_if_false_used_after();
20002052 }
20012053 //
20022054 CppAD::user_atomic<double>::clear();