Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit92eacaf

Browse files
committed
Change exp() behavior to generate error on underflow rather
than silently returning zero on some machines. Correct float8 regress testto agree. Also fix pow() overflow/underflow check to work correctly onHPUX.
1 parent67531c4 commit92eacaf

File tree

2 files changed

+5
-12
lines changed

2 files changed

+5
-12
lines changed

‎src/backend/utils/adt/float.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.34 1998/11/17 14:36:44 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.35 1998/11/29 01:57:59 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -1131,7 +1131,7 @@ dpow(float64 arg1, float64 arg2)
11311131
#endif
11321132
*result= (float64data)pow(tmp1,tmp2);
11331133
#ifndeffinite
1134-
if (errno==ERANGE)
1134+
if (errno!=0)/* on some machines both EDOM & ERANGE can occur */
11351135
#else
11361136
if (!finite(*result))
11371137
#endif
@@ -1164,7 +1164,8 @@ dexp(float64 arg1)
11641164
#ifndeffinite
11651165
if (errno==ERANGE)
11661166
#else
1167-
if (!finite(*result))
1167+
/* infinity implies overflow, zero implies underflow */
1168+
if (!finite(*result)||*result==0.0)
11681169
#endif
11691170
elog(ERROR,"exp() result is out of range");
11701171

‎src/test/regress/expected/float8.out

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -195,15 +195,7 @@ ERROR: can't take log of zero
195195
QUERY: SELECT '' AS bad, (; (f.f1)) from FLOAT8_TBL f where f.f1 < '0.0' ;
196196
ERROR: can't take log of a negative number
197197
QUERY: SELECT '' AS bad, : (f.f1) from FLOAT8_TBL f;
198-
bad| ?column?
199-
---+--------------------
200-
| 1
201-
|7.39912306090513e-16
202-
| 0
203-
| 0
204-
| 1
205-
(5 rows)
206-
198+
ERROR: exp() result is out of range
207199
QUERY: SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
208200
ERROR: float8div: divide by zero error
209201
QUERY: SELECT '' AS five, FLOAT8_TBL.*;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp