ITK
4.1.0
Insight Segmentation and Registration Toolkit
|
#include <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) |
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 |
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
double sum = 0.0; for( unsigned int i = 0; i < array.Size(); ++i ) { sum += array.GetElement(i); }
do
typedef CompensatedSummation<double> CompensatedSummationType; CompensatedSummationType compensatedSummation; for( unsigned int i = 0; i < array.Size(); ++i ) { compensatedSummation += array.GetElement(i); } double sum = compensatedSummation.GetSum();
Definition at line 66 of file itkCompensatedSummation.h.
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.
void itk::CompensatedSummation< TFloat >::ResetToZero | ( | ) |
Reset the sum and compensation to zero.
itk::CompensatedSummation< TFloat >::typedef | ( | itk::Concept::IsFloatingPoint< TFloat > | ) | [private] |
This class requires OnlyDefinedForFloatingPointTypes in the form of ( itk::Concept::IsFloatingPoint< TFloat > )
AccumulateType itk::CompensatedSummation< TFloat >::m_Compensation [private] |
Definition at line 109 of file itkCompensatedSummation.h.
AccumulateType itk::CompensatedSummation< TFloat >::m_Sum [private] |
Definition at line 108 of file itkCompensatedSummation.h.