mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
In dpow(), remove redundant check for whether y is an integer.
I failed to notice that we don't really need to check for y being an integer in the code path where x = -inf; we already did. Also make some further cosmetic rearrangements in that spot in hopes of dodging the seeming compiler bug that buildfarm member fossa is hitting. And be consistent about declaring variables as "float8" not "double", since the pre-existing variables in this function are like that. Discussion: https://postgr.es/m/E1jkyFX-0005RR-1Q@gemulon.postgresql.org
This commit is contained in:
parent
4dd804a99c
commit
400f169373
@ -1546,7 +1546,7 @@ dpow(PG_FUNCTION_ARGS)
|
||||
*/
|
||||
if (isinf(arg2))
|
||||
{
|
||||
double absx = fabs(arg1);
|
||||
float8 absx = fabs(arg1);
|
||||
|
||||
if (absx == 1.0)
|
||||
result = 1.0;
|
||||
@ -1578,16 +1578,15 @@ dpow(PG_FUNCTION_ARGS)
|
||||
}
|
||||
else /* x = -Inf */
|
||||
{
|
||||
bool yisoddinteger = false;
|
||||
/*
|
||||
* Per POSIX, the sign of the result depends on whether y is an
|
||||
* odd integer. Since x < 0, we already know from the previous
|
||||
* domain check that y is an integer. It is odd if y/2 is not
|
||||
* also an integer.
|
||||
*/
|
||||
float8 halfy = arg2 / 2; /* should be computed exactly */
|
||||
bool yisoddinteger = (floor(halfy) != halfy);
|
||||
|
||||
if (arg2 == floor(arg2))
|
||||
{
|
||||
/* y is integral; it's odd if y/2 is not integral */
|
||||
double halfy = arg2 / 2; /* should be computed exactly */
|
||||
|
||||
if (halfy != floor(halfy))
|
||||
yisoddinteger = true;
|
||||
}
|
||||
if (arg2 > 0.0)
|
||||
result = yisoddinteger ? arg1 : -arg1;
|
||||
else
|
||||
@ -1622,7 +1621,7 @@ dpow(PG_FUNCTION_ARGS)
|
||||
result = 0.0; /* we already verified y is positive */
|
||||
else
|
||||
{
|
||||
double absx = fabs(arg1);
|
||||
float8 absx = fabs(arg1);
|
||||
|
||||
if (absx == 1.0)
|
||||
result = 1.0;
|
||||
|
Loading…
Reference in New Issue
Block a user