[patch] std::experimental::gcd and std::experimental::lcd

Marc Glisse marc.glisse@inria.fr
Sat May 2 17:07:00 GMT 2015


On Sat, 2 May 2015, Jonathan Wakely wrote:

> On 02/05/15 18:27 +0200, Marc Glisse wrote:
>> On Sat, 2 May 2015, Jonathan Wakely wrote:
>> 
>>> These where simple to implement (almost too simple ... I probably
>>> got something wrong!)
>> 
>> I didn't remember that std::abs works for unsigned. It will need more work 
>> for performance, but that can certainly be done later (I didn't look at the 
>> code beyond checking what you meant by "simple").
>
> std::abs seems to work fine for unsigned, the overload in <cmath> for
> integral types just uses __builtin_fabs.

That's bad! You don't want to go through floating point, that cannot even 
represent int64_t accurately.

> Maybe it would be better for
> gcd() to just use that directly instead of including <cmath> (as
> attached, which also removes the qualification on the call to gcd
> because the functions only work for integral types which have no
> associated namespaces anyway).

Actually you use __builtin_abs (no 'f') in the patch, which apparently 
casts to int, that's even worse...

> <ratio> was added to libstdc++ in 2008 so I think the constexpr
> support was not good enough at the time.

Yes, but we modified a few pieces with Paolo in 2011, and those could have 
used constexpr I guess.

-- 
Marc Glisse



More information about the Libstdc++ mailing list