Re: Greatest Common Divisor

Поиск
Список
Период
Сортировка
От Vik Fearing
Тема Re: Greatest Common Divisor
Дата
Msg-id 6855727c-3836-21cc-18f9-e79227b99079@2ndquadrant.com
обсуждение исходный текст
Ответ на Re: Greatest Common Divisor  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Greatest Common Divisor
Список pgsql-hackers
On 02/01/2020 16:12, Tom Lane wrote:
> Stephen Frost <sfrost@snowman.net> writes:
>> * Dean Rasheed (dean.a.rasheed@gmail.com) wrote:
>>> I'm not objecting to adding it, I'm just curious. In fact, I think
>>> that if we do add this, then we should probably add lcm() at the same
>>> time, since handling its overflow cases is sufficiently non-trivial to
>>> justify not requiring users to have to implement it themselves.
>> I tend to agree with this.
> Does this impact the decision about whether we need a variant for
> numeric?  I was leaning against that, primarily because (a)
> it'd introduce a set of questions about what to do with non-integral
> inputs, and (b) it'd make the patch quite a lot larger, I imagine.
> But a variant of lcm() that returns numeric would have much more
> resistance to overflow.
>
> Maybe we could just define "lcm(bigint, bigint) returns numeric"
> and figure that that covers all cases, but it feels slightly
> weird.  You couldn't do lcm(lcm(a,b),c) without casting.
> I guess that particular use-case could be addressed with
> "lcm(variadic bigint[]) returns numeric", but that's getting
> really odd.


Okay.  Here is a version that should handle everyone's comments.


gcd() is now strictly positive, so INT_MIN is no longer a valid result.


I added an lcm() function. It returns the same type as its arguments so
overflow is possible.  I made this choice because int2mul returns int2
(and same for its friends).  One can just cast to a bigger integer if
needed.


Because of that, I added a version of gcd() and lcm() for numeric.  This
was my first time working with numeric so reviewers should pay extra
attention there, please.


Patch attached.

-- 

Vik Fearing


Вложения

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

Предыдущее
От: Mahendra Singh Thalor
Дата:
Сообщение: Re: \d is not showing global(normal) table info if we createtemporary table with same name as global table
Следующее
От: Robert Haas
Дата:
Сообщение: Re: [PATCH] Increase the maximum value track_activity_query_size