• Tom Lane's avatar
    Fix behavior of exp() and power() for infinity inputs. · decbe2bf
    Tom Lane authored
    Previously, these functions tended to throw underflow errors for
    negative-infinity exponents.  The correct thing per POSIX is to
    return 0, so let's do that instead.  (Note that the SQL standard
    is silent on such issues, as it lacks the concepts of either Inf
    or NaN; so our practice is to follow POSIX whenever a corresponding
    C-library function exists.)
    
    Also, add a bunch of test cases verifying that exp() and power()
    actually do follow POSIX for Inf and NaN inputs.  While this patch
    should guarantee that exp() passes the tests, power() will not unless
    the platform's pow(3) is fully POSIX-compliant.  I already know that
    gaur fails some of the tests, and I am suspicious that the Windows
    animals will too; the extent of compliance of other old platforms
    remains to be seen.  We might choose to drop failing test cases, or
    to work harder at overriding pow(3) for these cases, but first let's
    see just how good or bad the situation is.
    
    Discussion: https://postgr.es/m/582552.1591917752@sss.pgh.pa.us
    decbe2bf
float8.sql 15.8 KB