Re: exp() versus the POSIX standard

Поиск
Список
Период
Сортировка
От Darafei "Komяpa" Praliaskouski
Тема Re: exp() versus the POSIX standard
Дата
Msg-id CAC8Q8tJ09umiQdpGpGqiYRb8JOmnLztD2rQNk+o5FOx0cFBvQw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: exp() versus the POSIX standard  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: exp() versus the POSIX standard  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers


пт, 12 чэр 2020, 02:57 карыстальнік Tom Lane <tgl@sss.pgh.pa.us> напісаў:
I wrote:
> The POSIX standard says this about the exp(3) function:
>       If x is -Inf, +0 shall be returned.
> At least on my Linux box, our version does no such thing:
> regression=# select exp('-inf'::float8);
> ERROR:  value out of range: underflow

Now that I look, power() has similar issues:

regression=# select power('1.1'::float8, '-inf');
ERROR:  value out of range: underflow
regression=# select power('0.1'::float8, 'inf');
ERROR:  value out of range: underflow
regression=# select power('-inf'::float8, '-3');
ERROR:  value out of range: underflow
regression=# select power('-inf'::float8, '-4');
ERROR:  value out of range: underflow

contradicting POSIX which says

For |x| > 1, if y is -Inf, +0 shall be returned.

For |x| < 1, if y is +Inf, +0 shall be returned.

For y an odd integer < 0, if x is -Inf, -0 shall be returned.

For y < 0 and not an odd integer, if x is -Inf, +0 shall be returned.


I've had the same issue with multiplying two tiny numbers. Select 2e-300::float * 2e-300::float gives an underflow, and it is not a wanted thing. This looks like handmade implementation of IEEE754's underflow exception that should be an optional return flag in addition to well defined number, but became a stop-the-world exception instead. Had to build custom Postgres with that logic ripped off in the past to be able to multiply numbers. Will be happy if that "underflow" (and overflow) thing is removed.

If in doubt whether this exception should be removed, to follow the spec fully in this way you have to also raise exception on any inexact result of operations on floats. 







                        regards, tom lane


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: exp() versus the POSIX standard
Следующее
От: Tom Lane
Дата:
Сообщение: Infinities in type numeric