Re: pgsql: Have numeric 0 ^ 4.3 return 1, rather than an error, and have 0 ^ - Mailing list pgsql-committers

From Tom Lane
Subject Re: pgsql: Have numeric 0 ^ 4.3 return 1, rather than an error, and have 0 ^
Date
Msg-id 13701.1210343827@sss.pgh.pa.us
Whole thread Raw
In response to Re: pgsql: Have numeric 0 ^ 4.3 return 1, rather than an error, and have 0 ^  (Simon Riggs <simon@2ndquadrant.com>)
Responses Re: pgsql: Have numeric 0 ^ 4.3 return 1, rather than an error, and have 0 ^
List pgsql-committers
Simon Riggs <simon@2ndquadrant.com> writes:
> Wikipedia says that exponentiation of zero to a negative power implies
> division by zero, so shouldn't we throw a "division by zero" error?

I think it should be a specific message like "zero raised to a negative
power is undefined".  It's not like it's going to take us any extra code
to know that we are faced with that case.

BTW, I realized that SQL:2003 spells it all out for us in explicit
detail:

12)If <power function> is specified, then let NVEB be the <numeric value
expression base>, then let VB be the value of NVEB, let NVEE be the
<numeric value expression exponent>, and let VE be the value of NVEE.

Case:

a) If either VB or VE is the null value, then the result is the null value.

b) If VB is 0 (zero) and VE is negative, then an exception condition is
raised: data exception � invalid argument for power function.

c) If VB is 0 (zero) and VE is 0 (zero), then the result is 1 (one).

d) If VB is 0 (zero) and VE is positive, then the result is 0 (zero).

e) If VB is negative and VE is not equal to an exact numeric value with
scale 0 (zero), then an exception condition is raised: data exception
� invalid argument for power function.

f) If VB is negative and VE is equal to an exact numeric value with
scale 0 (zero) that is an even number, then the result is the result of
    EXP(NVEE*LN(-NVEB))

g) If VB is negative and VE is equal to an exact numeric value with
scale 0 (zero) that is an odd number, then the result is the result of
    -EXP(NVEE*LN(-NVEB))

h) Otherwise, the result is the result of
    EXP(NVEE*LN(NVEB))


            regards, tom lane

pgsql-committers by date:

Previous
From: heikki@postgresql.org (Heikki Linnakangas)
Date:
Subject: pgsql: Fix incorrect archive truncation point calculation in the %r
Next
From: heikki@postgresql.org (Heikki Linnakangas)
Date:
Subject: pgsql: Fix Assert introduced in previous patch.