------------------------------------------------------ lines 10-152 of file: include/cppad/core/ad_binary.hpp ------------------------------------------------------ {xrst_begin ad_binary} {xrst_spell div } AD Binary Arithmetic Operators ############################## Syntax ****** | *z* = *x* *Op* *y* Purpose ******* Performs arithmetic operations where either *x* or *y* has type ``AD`` < *Base* > or :ref:`VecAD@VecAD\::reference` . Op ** The operator *Op* is one of the following .. csv-table:: :widths: auto **Op**,**Meaning** ``+``,*z* is *x* plus *y* ``-``,*z* is *x* minus *y* ``*``,*z* is *x* times *y* ``/``,*z* is *x* divided by *y* Base **** The type *Base* is determined by the operand that has type ``AD`` < *Base* > or ``VecAD`` < *Base* >:: ``reference`` . x * The operand *x* has the following prototype ``const`` *Type* & *x* where *Type* is ``VecAD`` < *Base* >:: ``reference`` , ``AD`` < *Base* > , *Base* , or ``double`` . y * The operand *y* has the following prototype ``const`` *Type* & *y* where *Type* is ``VecAD`` < *Base* >:: ``reference`` , ``AD`` < *Base* > , *Base* , or ``double`` . z * The result *z* has the following prototype *Type* *z* where *Type* is ``AD`` < *Base* > . Operation Sequence ****************** This is an :ref:`atomic_base` :ref:`glossary@AD of Base` operation and hence it is part of the current AD of *Base* :ref:`operation sequence` . {xrst_toc_hidden example/general/add.cpp example/general/sub.cpp example/general/mul.cpp example/general/div.cpp } Zero Special Cases ****************** Suppose that an AD *value* is :ref:`identically zero ` . Then the following results will be identically zero no matter what *other* is: value * other, other * value, value / other. This may be unexpected when *other* is nan (or when it is zero in the division case). This is closely related to the :ref:`azmul-name` function. Example ******* The following files contain examples and tests of these functions. Each test returns true if it succeeds and false otherwise. .. csv-table:: :widths: auto add.cpp,:ref:`add.cpp-title` sub.cpp,:ref:`sub.cpp-title` mul.cpp,:ref:`mul.cpp-title` div.cpp,:ref:`div.cpp-title` Derivative ********** If :math:`f` and :math:`g` are :ref:`Base functions` Addition ======== .. math:: \D{[ f(x) + g(x) ]}{x} = \D{f(x)}{x} + \D{g(x)}{x} Subtraction =========== .. math:: \D{[ f(x) - g(x) ]}{x} = \D{f(x)}{x} - \D{g(x)}{x} Multiplication ============== .. math:: \D{[ f(x) * g(x) ]}{x} = g(x) * \D{f(x)}{x} + f(x) * \D{g(x)}{x} Division ======== .. math:: \D{[ f(x) / g(x) ]}{x} = [1/g(x)] * \D{f(x)}{x} - [f(x)/g(x)^2] * \D{g(x)}{x} {xrst_end ad_binary}