Prev Next

Obtain Nan and Determine if a Value is Nan

Syntax
# include <cppad/nan.hpp>
s = nan(z)
b = isnan(s)
b = hasnan(v)

Purpose
It obtain and check for the value not a number nan. The IEEE standard specifies that a floating point value a is nan if and only if the following returns true
     
a != a
Some systems do not get this correct, so we also use the fact that zero divided by zero should result in a nan. To be specific, if a value is not equal to itself or if it is equal to zero divided by zero, it is considered to be a nan.

Include
The file cppad/nan.hpp is included by cppad/cppad.hpp but it can also be included separately with out the rest of the CppAD routines.

Macros
Some C++ compilers use preprocessor symbols called nan and isnan. These preprocessor symbols will no longer be defined after this file is included.

nan
This routine returns a nan with the same type as z.

z
The argument z has prototype
     const 
Scalar &z 
and its value is zero (see Scalar for the definition of Scalar).

s
The return value s has prototype
     
Scalar s
It is the value nan for this floating point type.

isnan
This routine determines if a scalar value is nan.

s
The argument s has prototype
     const 
Scalar s

b
The return value b has prototype
     bool 
b
It is true if the value s is nan.

hasnan
This routine determines if a SimpleVector has an element that is nan.

v
The argument v has prototype
     const 
Vector &v
(see Vector for the definition of Vector).

b
The return value b has prototype
     bool 
b
It is true if the vector v has a nan.

Scalar
The type Scalar must support the following operations;
Operation Description
a / b division operator (returns a Scalar object)
a == b equality operator (returns a bool object)
a != b not equality operator (returns a bool object)
Note that the division operator will be used with a and b equal to zero. For some types (e.g. int) this may generate an exception. No attempt is made to catch any such exception.

Vector
The type Vector must be a SimpleVector class with elements of type Scalar.

Example
The file nan.cpp contains an example and test of this routine. It returns true if it succeeds and false otherwise.
Input File: cppad/nan.hpp