public inbox for [email protected]
help / color / mirror / Atom feedRe: BUG #19467: Inconsistency in MOD() result involving POWER() and floating-point precision in PostgreSQL
2+ messages / 2 participants
[nested] [flat]
* Re: BUG #19467: Inconsistency in MOD() result involving POWER() and floating-point precision in PostgreSQL
@ 2026-04-27 12:20 John Naylor <[email protected]>
2026-04-27 14:08 ` Re: BUG #19467: Inconsistency in MOD() result involving POWER() and floating-point precision in PostgreSQL Tom Lane <[email protected]>
0 siblings, 1 reply; 2+ messages in thread
From: John Naylor @ 2026-04-27 12:20 UTC (permalink / raw)
To: [email protected]; [email protected]
On Mon, Apr 27, 2026 at 6:33 PM PG Bug reporting form
<[email protected]> wrote:
> Mathematically, this corresponds to the fractional part of 3^70.31, which
> should be deterministic for a given evaluation strategy.
>
> However, different systems produce significantly different results:
These two statements don't contradict eachother.
Trying the expression on WolframAlpha shows 0.41 is close to the
expected value, so I don't see a bug here.
--
John Naylor
Amazon Web Services
^ permalink raw reply [nested|flat] 2+ messages in thread
* Re: BUG #19467: Inconsistency in MOD() result involving POWER() and floating-point precision in PostgreSQL
2026-04-27 12:20 Re: BUG #19467: Inconsistency in MOD() result involving POWER() and floating-point precision in PostgreSQL John Naylor <[email protected]>
@ 2026-04-27 14:08 ` Tom Lane <[email protected]>
0 siblings, 0 replies; 2+ messages in thread
From: Tom Lane @ 2026-04-27 14:08 UTC (permalink / raw)
To: John Naylor <[email protected]>; +Cc: [email protected]; [email protected]
John Naylor <[email protected]> writes:
> On Mon, Apr 27, 2026 at 6:33 PM PG Bug reporting form
> <[email protected]> wrote:
>> Mathematically, this corresponds to the fractional part of 3^70.31, which
>> should be deterministic for a given evaluation strategy.
>>
>> However, different systems produce significantly different results:
> These two statements don't contradict eachother.
> Trying the expression on WolframAlpha shows 0.41 is close to the
> expected value, so I don't see a bug here.
Those other systems are probably using float8 arithmetic, which has
nowhere near enough precision to give a nonzero answer.
In Postgres, constants like "3.00" are type numeric not type float8,
so:
regression=# select pow(3.00, 70.31);
pow
---------------------------------------
3518806773889710662003177340498520.41
(1 row)
regression=# select mod(pow(3.00, 70.31), 1);
mod
------
0.41
(1 row)
You can duplicate the lower-precision answer if you want:
regression=# select pow(3.00::float8, 70.31::float8);
pow
------------------------
3.5188067738897196e+33
(1 row)
regression=# select pow(3.00::float8, 70.31::float8)::numeric;
pow
------------------------------------
3518806773889720000000000000000000
(1 row)
regression=# select mod(pow(3.00::float8, 70.31::float8)::numeric, 1);
mod
-----
0
(1 row)
regards, tom lane
^ permalink raw reply [nested|flat] 2+ messages in thread
end of thread, other threads:[~2026-04-27 14:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2026-04-27 12:20 Re: BUG #19467: Inconsistency in MOD() result involving POWER() and floating-point precision in PostgreSQL John Naylor <[email protected]>
2026-04-27 14:08 ` Tom Lane <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox