Many websites and questions on Stack Overflow reference a function named std::__gcd
. What’s the difference between this function and std::gcd
?
I did some sleuthing on this. It looks like the __gcd
function is a private helper function defined in the libstdc++ implementation of the <algorithm>
header (line 1503). It’s used internally only by the std::rotate
function (line 1610). It was (probably) never intended to be used directly outside of the library implementation. Because it’s specific to libstdc++, trying to use this function through compilers other than g++ isn’t guaranteed to work. In that sense, you can think of the std::__gcd
function as a (poorly documented) internal helper that’s only available with some C++ compilers.
(Fun fact: I was first alerted to the existence of __gcd
by a now-deleted question here asking why it handled negative inputs inconsistently. Turns out it wasn’t really designed to handle negative numbers, since the libstdc++ implementation only uses it in cases where the inputs are nonnegative. It’s one of the risks of using an undocumented internal helper function!)
On the other hand, std::gcd
is a standard C++ library function that was introduced in C++17. This means that any C++17-compliant compiler will support std::gcd
, so it’s preferable to use this option if you have a C++17-compliant compiler.
For C++14 or lower, you can simply implement your own version GCD function. Euclid’s algorithm is very straightforward to code up and runs extremely quickly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With