diff options
author | drh <> | 2024-03-19 10:16:17 +0000 |
---|---|---|
committer | drh <> | 2024-03-19 10:16:17 +0000 |
commit | 5ed044e8935ac94170253d6686c126a472ef8dd0 (patch) | |
tree | 08112e56f4658db2b131e8b5005aa024db8b4f01 /src/func.c | |
parent | 28cd72ac520883a94cbb8444c38ff42aab485c52 (diff) | |
download | sqlite-5ed044e8935ac94170253d6686c126a472ef8dd0.tar.gz sqlite-5ed044e8935ac94170253d6686c126a472ef8dd0.zip |
Fix another problem from [c63e26e705f5e967] involving infinities and the
Kahan-Babushka-Neumaier summation algorithm. Problem reported by
[forum:/forumpost/23b8688ef4|forum post 23b8688ef4].
FossilOrigin-Name: 45d272ef38d5ee6189f81369aefb8e3ac35868a67687012d93c84f2bbc42520a
Diffstat (limited to 'src/func.c')
-rw-r--r-- | src/func.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/func.c b/src/func.c index 9fbd1e9e1..18004984d 100644 --- a/src/func.c +++ b/src/func.c @@ -1892,7 +1892,7 @@ static void sumFinalize(sqlite3_context *context){ if( p->approx ){ if( p->ovrfl ){ sqlite3_result_error(context,"integer overflow",-1); - }else if( !sqlite3IsNaN(p->rErr) ){ + }else if( !sqlite3IsOverflow(p->rErr) ){ sqlite3_result_double(context, p->rSum+p->rErr); }else{ sqlite3_result_double(context, p->rSum); @@ -1909,7 +1909,7 @@ static void avgFinalize(sqlite3_context *context){ double r; if( p->approx ){ r = p->rSum; - if( !sqlite3IsNaN(p->rErr) ) r += p->rErr; + if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr; }else{ r = (double)(p->iSum); } @@ -1923,7 +1923,7 @@ static void totalFinalize(sqlite3_context *context){ if( p ){ if( p->approx ){ r = p->rSum; - if( !sqlite3IsNaN(p->rErr) ) r += p->rErr; + if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr; }else{ r = (double)(p->iSum); } |