LSST Applications g0fba68d861+849f694866,g1fd858c14a+7a7b9dd5ed,g2c84ff76c0+5cb23283cf,g30358e5240+f0e04ebe90,g35bb328faa+fcb1d3bbc8,g436fd98eb5+bdc6fcdd04,g4af146b050+742274f7cd,g4d2262a081+9d5bd0394b,g4e0f332c67+cb09b8a5b6,g53246c7159+fcb1d3bbc8,g5a012ec0e7+477f9c599b,g60b5630c4e+bdc6fcdd04,g67b6fd64d1+2218407a0c,g78460c75b0+2f9a1b4bcd,g786e29fd12+cf7ec2a62a,g7b71ed6315+fcb1d3bbc8,g87b7deb4dc+777438113c,g8852436030+ebf28f0d95,g89139ef638+2218407a0c,g9125e01d80+fcb1d3bbc8,g989de1cb63+2218407a0c,g9f33ca652e+42fb53f4c8,g9f7030ddb1+11b9b6f027,ga2b97cdc51+bdc6fcdd04,gab72ac2889+bdc6fcdd04,gabe3b4be73+1e0a283bba,gabf8522325+3210f02652,gb1101e3267+9c79701da9,gb58c049af0+f03b321e39,gb89ab40317+2218407a0c,gcf25f946ba+ebf28f0d95,gd6cbbdb0b4+e8f9c9c900,gd9a9a58781+fcb1d3bbc8,gde0f65d7ad+47bbabaf80,gded526ad44+8c3210761e,ge278dab8ac+3ef3db156b,ge410e46f29+2218407a0c,gf67bdafdda+2218407a0c,v29.0.0.rc3
LSST Data Management Base Package
|
A numerically stable summation algorithm for floating-point numbers. More...
#include <SafeSum.h>
Public Member Functions | |
SafeSum (T initial=static_cast< T >(0)) noexcept | |
SafeSum & | operator= (T value) noexcept |
SafeSum & | operator+= (T value) noexcept |
SafeSum & | operator-= (T value) noexcept |
operator T () const noexcept | |
A numerically stable summation algorithm for floating-point numbers.
SafeSum implements += and -= operators that can be used to accumulate floating point numbers with very different magnitudes, with accuracy limited only by the usual floating-point inaccuracy in represented the final sum.
SafeSum is explicitly convertible to and from its underlying floating-point type and only supports in-place addition and subtraction, in order to avoid cases where a combination of implicit conversion and multiple overloaded operators could lead to accidental use of regular floating-point operations.
SafeSum uses the Kahan-Neumaier algorithm (though this should be considered an implementation detail by callers), which maintains a lower-order-bit correction that compensates for the loss of precision in the main sum. Particularly aggressive compiler optimizations that do not preserve IEEE floating point behavior (e.g. gcc's -fassociative-math
) may optimize away the correction and reduce SafeSum's behavior to a standard unsafe sum.
|
inlineexplicitnoexcept |
Definition at line 65 of file SafeSum.h.
|
inlineexplicitnoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |