Tom Lane wrote:
>
> What is the reason for maintaining separate rscale and dscale values in
> numeric variables?
>
> I am finding that this arrangement leads to some odd results, for
> example this:
>
> regression=# select (exp(ln(2.0)) - 2.0);
> ?column?
> ---------------------
> -0.0000000000000000
> (1 row)
>
> regression=# select (exp(ln(2.0)) - 2.0) * 100000;
> ?column?
> ---------------------
> -0.0000000000000010
> (1 row)
>
> The difference between rscale and dscale allows some "hidden" digits to
> be carried along in an expression result, and then possibly exposed
> later. This seems pretty nonintuitive for an allegedly exact
> calculational datatype. ISTM the policy should be "what you see is what
> you get" - no hidden digits. That would mean there's no need for
> separating rscale and dscale, so I'm wondering why they were put in
> to begin with.

## Advertising

You need to carry around a decent number of digits when you divide
already. Exposing them in a manner that numericcol(15,2) / 3.0 all of
the sudden displays 16 or more digits isn't much more intuitive. But
carrying around only 2 here leads to nonintuitively fuzzy results on the
other hand.
It only applies to division and higher functions, and these are not
"exact" if you calculate the result and represent it decimal. They never
have been.
So to answer your question, they are there to make the NUMERIC datatype
useful for non-exact stuff too. You can expect an exact result where an
exact representation in decimal can be expected. Where this is not the
case, you get a good approximation.
Jan
--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== [EMAIL PROTECTED] #
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])