// Programm: bigsmall.C
// demonstriert drastisch den Einfluss der
// Summationsreihenfolge auf das Ergebnis
// von Fliesskommaadditionen
#include
int main()
{
const unsigned int m = 16777216u; // 2^24
// -24 -24 -24
// 1 + 2 + 2 + ... + 2
// ------- 2^24 mal ------
float sum1 = 1.0f;
for (unsigned int i = 0; i < m; ++i)
sum1 += 1.0f / m; // kein Effekt
// -24 -24 -24
// 2 + 2 + ... + 2 + 1
// ------- 2^24 mal ------
float sum2 = 0.0f;
for (unsigned int i = 0; i < m; ++i)
sum2 += 1.0f / m; // exakte Addition
sum2 += 1.0f; // exakte Addition
std::cout << "Vorwaertssumme: " << sum1
<< "\nRueckwaertssumme: " << sum2
<< std::endl;
return 0;
}