An Epsilon Accurate Exponential Approximation
Keywords: epsilon accurate exponential approximation exp_eps example algorithm syntax purpose mathematical function include x y type implementation test exercises

| Prev | Next |  |  |  |  |  |

An Epsilon Accurate Exponential Approximation
Syntax
`# include "exp_eps.hpp"` `
` `y = exp_eps(x, epsilon)`
Purpose
This is a an example algorithm that is used to demonstrate how Algorithmic Differentiation works with loops and boolean decision variables (see exp_2 for a simpler example).
Mathematical Function
The exponential function can be defined by exp ( x ) = 1 + x 1 / 1 ! + x 2 / 2 ! + ⋯ We define k ( x , ε ) as the smallest non-negative integer such that ε ≥ x k / k ! ; i.e., k ( x , ε ) = min { k ∈ Z + | ε ≥ x k / k ! } The mathematical form for our approximation of the exponential function is exp _ eps ( x , ε ) = { 1 exp _ eps ( - x , ε ) if x < 0 1 + x 1 / 1 ! + ⋯ + x k ( x , ε ) / k ( x , ε ) ! otherwise
include
The include command in the syntax is relative to `
cppad-yyyymmdd/introduction/exp_apx
` where `cppad-yyyymmdd` is the distribution directory created during the beginning steps of the installation of CppAD.
x
The argument `x` has prototype `
const Type &x
` (see `Type` below). It specifies the point at which to evaluate the approximation for the exponential function.
epsilon
The argument `epsilon` has prototype `
const Type &epsilon
` It specifies the accuracy with which to approximate the exponential function value; i.e., it is the value of ε in the exponential function approximation defined above.
y
The result `y` has prototype `
Type y
` It is the value of the exponential function approximation defined above.
Type
If `u` and `v` are `Type` objects and `i` is an `int`:

Operation | Result Type | Description
`Type(i)` | `Type` | object with value equal to `i`
`Type u = v` | `Type` | construct `u` with value equal to `v`
`u > v` | `bool` | true, if `u` greater than `v` , an false otherwise
`u = v` | `Type` | new `u` (and result) is value of `v`
`u * v` | `Type` | result is value of u * v
`u / v` | `Type` | result is value of u / v
`u + v` | `Type` | result is value of u + v
`-u` | `Type` | result is value of - u

Implementation
The file exp_eps.hpp contains a C++ implementation of this function.
Test
The file exp_eps.cpp contains a test of this implementation. It returns true for success and false for failure.
Exercises

1. Using the definition of k ( x , ε ) above, what is the value of k ( .5 , 1 ) , k ( .5 , .1 ) , and k ( .5 , .01 ) ?
2. Suppose that we make the following call to `exp_eps`: `

            double x       = 1.;
            double epsilon = .01;
            double y = exp_eps(x, epsilon);

   ` What is the value assigned to `k`, `temp`, `term`, and `sum` the first time through the `while` loop in exp_eps.hpp ?
3. Continuing the previous exercise, what is the value assigned to `k`, `temp`, `term`, and `sum` the second time through the `while` loop in exp_eps.hpp ?

Input File: introduction/exp_apx/exp_eps.hpp