Re: [GENERAL] round(x) function

2010-03-26 Thread Tom Lane
Gaietti, Mauro \(SELEX GALILEO Guest, Italy\) 
mauro.gaie...@guests.selexgalileo.com writes:
 This query: 
 select round(0.5), round(0.5::integer), round(0.5::bigint), round(
 0.5::float ), round( 0.5::double precision ),round(cast(0.5 as double
 precision )),round(cast(0.5::double precision as numeric )); has strange
 result:

 1 1 1 0 0 0 1

 Is this correct? 

On most machines the float4/float8 operations follow the IEEE-754 spec's
round to nearest even rule for such cases.  I think all the other ones
are add 0.5 and truncate implementations.  It's unlikely we'll mess
with either; and *highly* unlikely that we would change the float
behavior since that's not even under our direct control (the hardware or
libm is what's doing that).  There's some case to be made for making
numeric and integer math do it the IEEE way, but I think that would
displease at least as many people as it pleased ...

regards, tom lane

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


Re: [GENERAL] round(x) function

2010-03-26 Thread Justin Graf
On 3/26/2010 12:12 PM, Tom Lane wrote:
 Gaietti, Mauro \(SELEX GALILEO Guest, 
 Italy\)mauro.gaie...@guests.selexgalileo.com  writes:

 This query:
 select round(0.5), round(0.5::integer), round(0.5::bigint), round(
 0.5::float ), round( 0.5::double precision ),round(cast(0.5 as double
 precision )),round(cast(0.5::double precision as numeric )); has strange
 result:
 1 1 1 0 0 0 1
  
 Is this correct?
  
 On most machines the float4/float8 operations follow the IEEE-754 spec's
 round to nearest even rule for such cases.  I think all the other ones
 are add 0.5 and truncate implementations.  It's unlikely we'll mess
 with either; and *highly* unlikely that we would change the float
 behavior since that's not even under our direct control (the hardware or
 libm is what's doing that).  There's some case to be made for making
 numeric and integer math do it the IEEE way, but I think that would
 displease at least as many people as it pleased ...

   regards, tom lane


This topic keeps coming up every few months about rounding which way is 
correct.  I would be in favor of adding a option to round() function to 
specify method.

Leave the defaults as they are for backwards capability, meaning if no 
option is passed to Round() it follows current methods.  I agree 
changing how it works now would annoy many.

The option would be very simple something like this
 Round( 0.5, RoundToEven) = 0
Round( -0.5, RoundToEven) = 0
 Round(0.5, RoundUp) = 1
 Round(-0.5, RoundUp) = 0
 Round(0.5, RoundDown) = 0
 Round(-0.5, RoundDown) = -1
 Round(0.5, RoundToZero) = 0
  Round(-0.5, RoundToZero) = 0

There are so many methods of rounding to choose from
http://en.wikipedia.org/wiki/Rounding


All legitimate Magwerks Corporation quotations are sent in a .PDF file 
attachment with a unique ID number generated by our proprietary quotation 
system. Quotations received via any other form of communication will not be 
honored.

CONFIDENTIALITY NOTICE: This e-mail, including attachments, may contain legally 
privileged, confidential or other information proprietary to Magwerks 
Corporation and is intended solely for the use of the individual to whom it 
addresses. If the reader of this e-mail is not the intended recipient or 
authorized agent, the reader is hereby notified that any unauthorized viewing, 
dissemination, distribution or copying of this e-mail is strictly prohibited. 
If you have received this e-mail in error, please notify the sender by replying 
to this message and destroy all occurrences of this e-mail immediately.
Thank you.


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