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

Jonathan Wakely jwakely@redhat.com
Sat May 2 17:16:00 GMT 2015


On 02/05/15 19:07 +0200, Marc Glisse wrote:
>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.

Good point - we should fix <cmath> then!

>>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...

Oops, that's a typo (I didn't even test that change).

>><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.

Ah I see. What we have now works, so it's not a priority to try and
replace bits of it with constexpr functions.



More information about the Libstdc++ mailing list