From 16679296b77429c4d11a9b82edc5af187c899957 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 3 Apr 2018 12:22:32 +0200 Subject: [PATCH] replace summation with error correction by summation using double precision --- rtengine/EdgePreservingDecomposition.cc | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc index 1ddd17107..4c56cbb5d 100644 --- a/rtengine/EdgePreservingDecomposition.cc +++ b/rtengine/EdgePreservingDecomposition.cc @@ -125,28 +125,14 @@ float *SparseConjugateGradient(void Ax(float *Product, float *x, void *Pass), fl #pragma omp parallel #endif { - float c = 0.0f; #ifdef _OPENMP - #pragma omp for reduction(+:rs) // Summation with error correction + #pragma omp for reduction(+:rs) #endif for(int ii = 0; ii < n; ii++) { - float temp = r[ii] * s[ii]; - float t = rs + temp; - - if( fabsf(rs) >= fabsf(temp) ) { - c += ((rs - t) + temp); - } else { - c += ((temp - t) + rs); - } - - rs = t; + rs += r[ii] * s[ii]; } -#ifdef _OPENMP - #pragma omp critical -#endif - rs += c; } ab = rs / ab;