`Tom Lane wrote:`

Andreas Pflug <[EMAIL PROTECTED]> writes:

Well, to me it's not well-known that floating-point addition is not associative, do I need to re-learn my math?

regression=# select (1.0::float8 + (-1.0::float8)) + 1.0e-20::float8; ?column? ---------- 1e-20 (1 row)## Advertising

regression=# select 1.0::float8 + ((-1.0::float8) + 1.0e-20::float8); ?column? ---------- 0 (1 row)

Hi Tom,

Hi Tom,

`I already suspected an example like this. Obviously in a pure math world, the second example is wrong, caused by implicite rounding. Fortunately, if omitting the float8 casts numeric is used, delivering ultimate precision.`

`Just for curiousity: on MSSQL2000, the first will deliver 9.99999999999995E-21, and if the type decimal(30,25) is used both give 0.00000000000. Even better, CAST( CAST(1E-20 AS DECIMAL(30,25) AS FLOAT) is 0.0 :->`

`Oracle 9.2 will calculate correctly with float down to 1.0e-40.`

Regards, Andreas

---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives?

`http://archives.postgresql.org`