Received: from sss.pgh.pa.us (sss.pgh.pa.us [209.114.132.154]) by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id eBKJag613167 for ; Wed, 20 Dec 2000 14:36:42 -0500 (EST) (envelope-from tgl@sss.pgh.pa.us) Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1]) by sss.pgh.pa.us (8.11.1/8.11.1) with ESMTP id eBKJZjC10056; Wed, 20 Dec 2000 14:35:45 -0500 (EST) To: Peter Eisentraut cc: "He Weiping(Laser Henry)" , pgsql-docs@postgresql.org Subject: Re: some errors and/or bugs? In-reply-to: References: Comments: In-reply-to Peter Eisentraut message dated "Tue, 19 Dec 2000 17:36:37 +0100" Date: Wed, 20 Dec 2000 14:35:44 -0500 Message-ID: <10051.977340944@sss.pgh.pa.us> From: Tom Lane X-Archive-Number: 200012/70 X-Sequence-Number: 117 Peter Eisentraut writes: > Tom Lane writes: >> It's correct, if the underlying float arithmetic is IEEE-compliant. >> Rounding for exact half-integral values is supposed to be "round to >> nearest even". So 42.5 goes to 42, but 43.5 goes to 44. >> >> I notice our NUMERIC rounding code does not do that ... perhaps it >> should. > More precisely, an IEEE-compliant system would offer the choice of > rounding up, rounding down, rounding toward zero, or rounding toward even. > I would guess that the default is merely the potentially best performing. Hmm. Round-toward-even is preferred by numerical analysts on the theory that it introduces less systematic bias than simpler rounding rules. (If you always round half-integral values in the same direction, then your results are slightly biased, just as if you'd set the up/down split point at say 0.4 instead of 0.5.) However this theory only holds if you assume an imprecise starting value. That's a reasonable assumption for float arithmetic, but not so reasonable for type numeric. > We could offer these options (much more easily) for the numeric case, but > since numeric is very often used for business type applications, the > customary rounding method (up) should be preferred. You're probably right, we shouldn't change it. regards, tom lane