#include <constants.h>
Public Types | |
typedef detail::ScalarTrait< S >::type | Real |
Static Public Member Functions | |
static constexpr Real | eps () |
Returns ε for the precision of the underlying scalar type. More... | |
static Real | eps_12 () |
Returns ε^(1/2) for the precision of the underlying scalar type. More... | |
static Real | eps_34 () |
Returns ε^(3/4) for the precision of the underlying scalar type. More... | |
static Real | eps_78 () |
Returns ε^(7/8) for the precision of the underlying scalar type. More... | |
static Real | gjk_default_tolerance () |
static constexpr S | phi () |
The golden ratio. More... | |
static constexpr S | pi () |
The mathematical constant pi. More... | |
A collection of scalar-dependent constants. This provides the ability to get mathematical constants and tolerance values that are appropriately scaled and typed to the scalar type S
.
Constants pi()
and phi()
are returned in the literal scalar type S
. In other words, if S
is an AutoDiffScalar<...>
, then the value of pi
and phi
are likewise AutoDiffScalar<...>
typed.
Tolerances (e.g., eps()
and its variants) are always provided in the scalar's numerical representation. In other words, if S
is a double
or float
, the tolerances are given as double
and float
, respectively. For AutoDiffScalar
it is more interesting. The AutoDiffScalar
has an underlying numerical representation (e.g., AutoDiffScalar<Matrix<double, 1, 3>>
has a double). It is the type of this underlying numerical representation that is provided by the tolerance functions.
This is designed to specifically work with float
, double
, long double
, and corresponding AutoDiffScalar
types. However, custom scalars will also work provided that the scalar type provides a class member type Real
which must be one of long double
, double
, or float
. E.g.,
The above example shows a common but incorrect method for defining a local epsilon. It defines it as being an order of magnitude larger (base 10) than the machine epsilon for S
. However, if S
is a float, its epsilon is essentially 1e-7. A full decimal digit of precision is 1/7th of the available digits. In contrast, double epsilon is approximately 2e-16. Throwing away a digit there reduces the precision by only 1/16th. This technique disproportionately punishes lower-precision numerical representations. Instead, by raising epsilon to a fractional power, we scale the precision. Roughly, ε^(1/2)
gives us half the precision (3.5e-4 for floats and 1.5e-8 for doubles). Similarly powers of 3/4 and 7/8 gives us three quarters and 7/8ths of the bits of precision. By defining tolerances in this way, one can get some fraction of machine precision, regardless of the choice of numeric type.
S | The scalar type for which constant values will be retrieved. |
Definition at line 129 of file constants.h.
typedef detail::ScalarTrait<S>::type fcl::constants< S >::Real |
Definition at line 131 of file constants.h.
|
inlinestaticconstexpr |
Returns ε for the precision of the underlying scalar type.
Definition at line 151 of file constants.h.
|
inlinestatic |
Returns ε^(1/2) for the precision of the underlying scalar type.
Definition at line 176 of file constants.h.
|
inlinestatic |
Returns ε^(3/4) for the precision of the underlying scalar type.
Definition at line 170 of file constants.h.
|
inlinestatic |
Returns ε^(7/8) for the precision of the underlying scalar type.
Definition at line 164 of file constants.h.
|
inlinestatic |
Defines the default accuracy for gjk and epa tolerance. It is defined as ε^(7/8) – where ε is the machine precision epsilon for the in-use Real. The value is a much smaller epsilon for doubles than for floats (2e-14 vs 9e-7, respectively). The choice of ε^(7/8) as the default GJK tolerance reflects a tolerance that is a slightly tighter bound than the historical value of 1e-6 used for 32-bit floats.
Definition at line 145 of file constants.h.
|
inlinestaticconstexpr |
The golden ratio.
Definition at line 137 of file constants.h.
|
inlinestaticconstexpr |
The mathematical constant pi.
Definition at line 134 of file constants.h.