Summation function to minimize rounding issues

AI Thread Summary
The discussion focuses on a C++ class designed for the summation of double precision floating-point numbers, emphasizing the reduction of rounding errors by organizing numbers in an array indexed by their exponent. Key functionalities include initializing the array upon instance creation, clearing it, adding numbers, and retrieving the current sum. The critical method, addnum(), efficiently adds numbers to the array by checking their exponent and managing potential overflow. A link to a source file with example test code is provided, demonstrating the class's capabilities through a specific summation example. The conversation also touches on the challenges of floating-point arithmetic in financial applications, highlighting the necessity for extensive testing before deploying such solutions in production environments. Additionally, there is mention of Fujitsu's CPUs that support variable floating-point precision, suggesting interest in further research on this technology.
rcgldr
Homework Helper
Messages
8,917
Reaction score
672
This is a C++ class to be used for summation of doubles (floating point). It uses an array of 2048 doubles indexed by exponent to minimize rounding errors by only adding numbers that have the same exponent.

NUM::NUM - array is cleared out when an instance of NUM is created
NUM::clear() - clears out the array
NUM::addnum() - add a number to the array
NUM::getsum() - returns the current sum of the array

link to zip of source file with example test code that adds 1./5. 4,294,967,295 (2^32-1) times and displays a sum using normal addition and using the SUM class.

http://rcgldr.net/misc/sum.zip

This is the key part of the SUM class, the addnum() function:

Code:
void SUM::addnum(double d)      // add a number into the array
{
size_t i;

    while(1){
//      i = exponent of d
        i = ((size_t)((*(unsigned long long *)&d)>>52))&0x7ff;
        if(i == 0x7ff){ // max exponent, could be overflow
            asum[i] += d;
            return;
        }
        if(this->asum[i] == 0){ // if empty slot store d
            asum[i] = d;
            return;
        }
        d += asum[i];           // else add slot to d, clear slot
        asum[i] = 0.;           // and continue until empty slot
    }
}
 
  • Like
Likes jim mcnamara
Technology news on Phys.org
https://www.extremetech.com/computing/272558-japan-tests-silicon-for-exascale-computing-in-2021Futjitsu has a line of CPU's (One for historical SPARC: SPARC64 VIIIfx ), the newest ones are mentioned in the article above. CPU natively supports a variable floating point precision - with correct rounding. It would be interesting to read the white paper behind this effort.

While what you provide is very useful, I would never put it to work with production code without really extensive testing. Which means, in practice, I could not deploy it. Floating point is the bane of financial calculations, as you obviously know.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Replies
3
Views
3K
Replies
3
Views
2K
Replies
1
Views
11K
Replies
2
Views
4K
Replies
15
Views
4K
Replies
23
Views
2K
Replies
3
Views
3K
Replies
12
Views
3K
Back
Top