ITK
4.3.0
Insight Segmentation and Registration Toolkit
|
#include <itkCompensatedSummation.h>
Perform more precise accumulation of floating point numbers.
The float
and double
datatypes only have finite precision. When performing a running sum of floats, the accumulated errors get progressively worse as the magnitude of the sum gets large relative to new elements.
From Wikipedia, http://en.wikipedia.org/wiki/Kahan_summation_algorithm
"In numerical analysis, the Kahan summation algorithm (also known as compensated summation) significantly reduces the numerical error in the total obtained by adding a sequence of finite precision floating point numbers, compared to the obvious approach. This is done by keeping a separate running compensation (a variable to accumulate small errors)."
For example, instead of
do
Definition at line 66 of file itkCompensatedSummation.h.
Public Types | |
typedef NumericTraits < FloatType >::AccumulateType | AccumulateType |
typedef TFloat | FloatType |
typedef CompensatedSummation | Self |
Public Member Functions | |
CompensatedSummation () | |
CompensatedSummation (const Self &rhs) | |
const AccumulateType & | GetSum () const |
Self & | operator-= (const FloatType &rhs) |
void | operator= (const Self &rhs) |
Self & | operator= (const FloatType &rhs) |
void | ResetToZero () |
void | AddElement (const FloatType &element) |
Self & | operator+= (const FloatType &rhs) |
Self & | operator*= (const FloatType &rhs) |
Self & | operator/= (const FloatType &rhs) |
Private Member Functions | |
typedef (itk::Concept::IsFloatingPoint< TFloat >) OnlyDefinedForFloatingPointTypes | |
Private Attributes | |
AccumulateType | m_Compensation |
AccumulateType | m_Sum |
typedef NumericTraits< FloatType >::AccumulateType itk::CompensatedSummation< TFloat >::AccumulateType |
Type used for the sum and compensation.
Definition at line 73 of file itkCompensatedSummation.h.
typedef TFloat itk::CompensatedSummation< TFloat >::FloatType |
Type of the input elements.
Definition at line 70 of file itkCompensatedSummation.h.
typedef CompensatedSummation itk::CompensatedSummation< TFloat >::Self |
Standard class typedefs.
Definition at line 76 of file itkCompensatedSummation.h.
itk::CompensatedSummation< TFloat >::CompensatedSummation | ( | ) |
Constructor.
itk::CompensatedSummation< TFloat >::CompensatedSummation | ( | const Self & | rhs | ) |
Copy constructor.
void itk::CompensatedSummation< TFloat >::AddElement | ( | const FloatType & | element | ) |
Add an element to the sum.
const AccumulateType& itk::CompensatedSummation< TFloat >::GetSum | ( | ) | const |
Get the sum.
Self& itk::CompensatedSummation< TFloat >::operator*= | ( | const FloatType & | rhs | ) |
Division and multiplication. These do not provide any numerical advantages relative to vanilla division and multiplication.
Self& itk::CompensatedSummation< TFloat >::operator+= | ( | const FloatType & | rhs | ) |
Add an element to the sum.
Self& itk::CompensatedSummation< TFloat >::operator-= | ( | const FloatType & | rhs | ) |
Subtract an element from the sum.
Self& itk::CompensatedSummation< TFloat >::operator/= | ( | const FloatType & | rhs | ) |
Division and multiplication. These do not provide any numerical advantages relative to vanilla division and multiplication.
void itk::CompensatedSummation< TFloat >::operator= | ( | const Self & | rhs | ) |
Assignment operator.
Self& itk::CompensatedSummation< TFloat >::operator= | ( | const FloatType & | rhs | ) |
Reset the sum to the given value and the compensation to zero.
void itk::CompensatedSummation< TFloat >::ResetToZero | ( | ) |
Reset the sum and compensation to zero.
|
private |
This class requires OnlyDefinedForFloatingPointTypes in the form of ( itk::Concept::IsFloatingPoint< TFloat > )
|
private |
Definition at line 112 of file itkCompensatedSummation.h.
|
private |
Definition at line 111 of file itkCompensatedSummation.h.