Re: [HACKERS] pow support for pgbench - Mailing list pgsql-hackers

From Fabien COELHO
Subject Re: [HACKERS] pow support for pgbench
Date
Msg-id alpine.DEB.2.20.1711061551450.5606@lancre
Whole thread Raw
In response to Re: [HACKERS] pow support for pgbench  (Raúl Marín Rodríguez <rmrodriguez@carto.com>)
Responses Re: [HACKERS] pow support for pgbench  (Raúl Marín Rodríguez <rmrodriguez@carto.com>)
List pgsql-hackers
Hello,

> Sorry for the confusion, I wasn't aware that SQL pow changed types 
> depending on the input value.

Indeed, this is quite strange...
  fabien=# SELECT i, POW(2, i) FROM generate_series(-2, 2) AS i;   -2 | 0.25   -1 | 0.5    0 | 1    1 | 2    2 | 4

> I've modified the function to match more closely the behaviour of SQL, 
> except that 0^(negative) returns 'double inf'. Do you think there is any 
> value in raising an error instead?
  fabien=# SELECT POW(0,-1);  ERROR:  zero raised to a negative power is undefined

Hmmmm... I'm fine with double inf, because exception in pgbench means the 
end of the script, which is not desirable for benchmarking purposes.

I think that:
 - you can simplify the ipow function by removing handling of y<0 case,   maybe add an assert to be sure to avoid it.
 - you should add more symmetry and simplify the evaluation:
   if (int & int)   {      i1, i2 = ...;      if (i2 >= 0)        setIntValue(retval, ipow(i1, i2));      else
//conversion is done by C, no need to coerce again        setDoubleValue(retval, pow(i1, i2));   }   else   {     d1,
d2= ...;     setDoubleValue(retval, pow(d1, d2));   }
 

Add a test case to show what happens on NULL arguments, hopefully the 
result is NULL.

-- 
Fabien.


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

pgsql-hackers by date:

Previous
From: Sokolov Yura
Date:
Subject: Re: [HACKERS] Fix performance degradation of contended LWLock on NUMA
Next
From: "Jim Van Fleet"
Date:
Subject: Re: [HACKERS] [POC] Faster processing at Gather node