Avoid wrong results for power() with NaN input on more platforms.
Tom Lane <tgl@sss.pgh.pa.us>
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
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/utils/adt/float.c | modified | +21 −3 |
| src/test/regress/expected/float8-exp-three-digits-win32.out | modified | +6 −0 |
| src/test/regress/expected/float8.out | modified | +6 −0 |
| src/test/regress/expected/float8-small-is-zero_1.out | modified | +6 −0 |
| src/test/regress/expected/float8-small-is-zero.out | modified | +6 −0 |
| src/test/regress/sql/float8.sql | modified | +1 −0 |
Discussion
- power() function in Windows: "value out of range: underflow" 21 messages · 2018-04-10 → 2018-05-02