Re: Exponentiation confusion

Поиск
Список
Период
Сортировка
От Erik Wienhold
Тема Re: Exponentiation confusion
Дата
Msg-id 603008316.190107.1665680007674@office.mailbox.org
обсуждение исходный текст
Ответ на Exponentiation confusion  (Adrian Klaver <adrian.klaver@aklaver.com>)
Ответы Re: Exponentiation confusion  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
> On 13/10/2022 18:20 CEST Adrian Klaver <adrian.klaver@aklaver.com> wrote:
> 
> In trying to answer an SO question I ran across this:
> 
> Postgres version 14.5
> 
> select 10^(-1 * 18);
>   ?column?
> ----------
>      1e-18
> 
> select 10^(-1 * 18::numeric);
>        ?column?
> --------------------
>   0.0000000000000000
> 
> 
> Same for power:
> 
> select power(10, -18);
>   power
> -------
>   1e-18
> (1 row)
> 
> select power(10, -18::numeric);
>         power
> --------------------
>   0.0000000000000000
> 
> 
> Why is the cast throwing off the result?

power has two overloads: https://www.postgresql.org/docs/14/functions-math.html#id-1.5.8.9.6.2.2.19.1.1.1

Calling power(numeric, numeric) is what I expect in that case instead of
downcasting the exponent argument to double precision, thus losing precision.

select
  pg_typeof(power(10, -18)),
  pg_typeof(power(10, -18::numeric));

    pg_typeof     | pg_typeof 
------------------+-----------
 double precision | numeric
(1 row)

Determining the right function is described in https://www.postgresql.org/docs/14/typeconv-func.html

--
Erik



В списке pgsql-general по дате отправления:

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Exponentiation confusion
Следующее
От: Ron
Дата:
Сообщение: Re: PGAdmin 4 fatal error after enabling the import logging