diff options
| author | Tom Lane | 2018-04-29 22:15:16 +0000 |
|---|---|---|
| committer | Tom Lane | 2018-04-29 22:15:16 +0000 |
| commit | 59c2df3ae8947c4c06217d1b330cfa529f480e17 (patch) | |
| tree | 508641935235fa356a9f6d9bf51291c3a9bc653c /src/test/regress | |
| parent | 37c02b2b0a146e623ff6d350f89310a5cfad25e0 (diff) | |
Avoid wrong results for power() with NaN input on more platforms.
Buildfarm results show that the modern POSIX rule that 1 ^ NaN = 1 is not
honored on *BSD until relatively recently, and really old platforms don't
believe that NaN ^ 0 = 1 either. (This is unsurprising, perhaps, since
SUSv2 doesn't require either behavior.) In hopes of getting to platform
independent behavior, let's deal with all the NaN-input cases explicitly
in dpow().
Note that numeric_power() doesn't know either of these special cases.
But since that behavior is platform-independent, I think it should be
addressed separately, and probably not back-patched.
Discussion: https://postgr.es/m/75DB81BEEA95B445AE6D576A0A5C9E936A73E741@BPXM05GP.gisp.nec.co.jp
Diffstat (limited to 'src/test/regress')
| -rw-r--r-- | src/test/regress/expected/float8-exp-three-digits-win32.out | 6 | ||||
| -rw-r--r-- | src/test/regress/expected/float8-small-is-zero.out | 6 | ||||
| -rw-r--r-- | src/test/regress/expected/float8-small-is-zero_1.out | 6 | ||||
| -rw-r--r-- | src/test/regress/expected/float8.out | 6 | ||||
| -rw-r--r-- | src/test/regress/sql/float8.sql | 1 |
5 files changed, 25 insertions, 0 deletions
diff --git a/src/test/regress/expected/float8-exp-three-digits-win32.out b/src/test/regress/expected/float8-exp-three-digits-win32.out index 8e4cbb05042..1d0e3a46f2d 100644 --- a/src/test/regress/expected/float8-exp-three-digits-win32.out +++ b/src/test/regress/expected/float8-exp-three-digits-win32.out @@ -358,6 +358,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/expected/float8-small-is-zero.out b/src/test/regress/expected/float8-small-is-zero.out index e3e004451c1..fa47c9d2759 100644 --- a/src/test/regress/expected/float8-small-is-zero.out +++ b/src/test/regress/expected/float8-small-is-zero.out @@ -362,6 +362,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/expected/float8-small-is-zero_1.out b/src/test/regress/expected/float8-small-is-zero_1.out index e9487cffa64..15d48dfc399 100644 --- a/src/test/regress/expected/float8-small-is-zero_1.out +++ b/src/test/regress/expected/float8-small-is-zero_1.out @@ -362,6 +362,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/expected/float8.out b/src/test/regress/expected/float8.out index 1bf225ca2b6..2d5f0247408 100644 --- a/src/test/regress/expected/float8.out +++ b/src/test/regress/expected/float8.out @@ -358,6 +358,12 @@ SELECT power(float8 'NaN', float8 'NaN'); NaN (1 row) +SELECT power(float8 '-1', float8 'NaN'); + power +------- + NaN +(1 row) + SELECT power(float8 '1', float8 'NaN'); power ------- diff --git a/src/test/regress/sql/float8.sql b/src/test/regress/sql/float8.sql index 2b2e175c6d7..78bec137e2f 100644 --- a/src/test/regress/sql/float8.sql +++ b/src/test/regress/sql/float8.sql @@ -111,6 +111,7 @@ SELECT power(float8 '144', float8 '0.5'); SELECT power(float8 'NaN', float8 '0.5'); SELECT power(float8 '144', float8 'NaN'); SELECT power(float8 'NaN', float8 'NaN'); +SELECT power(float8 '-1', float8 'NaN'); SELECT power(float8 '1', float8 'NaN'); SELECT power(float8 'NaN', float8 '0'); |
