From a7d4edc769419cd6045814cfffc4533c052248a6 Mon Sep 17 00:00:00 2001 From: John Maddock Date: Sun, 9 Dec 2012 16:41:53 +0000 Subject: [PATCH] Tweak GCD for better performance. [SVN r81810] --- include/boost/multiprecision/detail/integer_ops.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/boost/multiprecision/detail/integer_ops.hpp b/include/boost/multiprecision/detail/integer_ops.hpp index 06df91ab..4f778775 100644 --- a/include/boost/multiprecision/detail/integer_ops.hpp +++ b/include/boost/multiprecision/detail/integer_ops.hpp @@ -86,12 +86,12 @@ inline void eval_gcd(B& result, const B& a, const B& b) { /* Now u and v are both odd, so diff(u, v) is even. Let u = min(u, v), v = diff(u, v)/2. */ - if(u.compare(v) > 0) + s = u.compare(v); + if(s > 0) u.swap(v); - eval_subtract(v, u); - // Termination condition tries not to do a full compare if possible: - if(eval_is_zero(v)) + if(s == 0) break; + eval_subtract(v, u); vs = eval_lsb(v); eval_right_shift(v, vs); }