From 10077c1a0cb72b3342482fa2ac76dbb501ea849c Mon Sep 17 00:00:00 2001 From: John Maddock Date: Fri, 9 Aug 2013 17:44:48 +0000 Subject: [PATCH] Fix exact sqrt's. [SVN r85255] --- include/boost/multiprecision/detail/default_ops.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/boost/multiprecision/detail/default_ops.hpp b/include/boost/multiprecision/detail/default_ops.hpp index 85c5a021..d47bbf58 100644 --- a/include/boost/multiprecision/detail/default_ops.hpp +++ b/include/boost/multiprecision/detail/default_ops.hpp @@ -1149,6 +1149,8 @@ void eval_integer_sqrt(B& s, B& r, const B& x) eval_bit_set(t, 2 * g); eval_subtract(r, x, t); --g; + if(eval_get_sign(r) == 0) + return; int msbr = eval_msb(r); do { @@ -1161,6 +1163,8 @@ void eval_integer_sqrt(B& s, B& r, const B& x) { eval_bit_set(s, g); eval_subtract(r, t); + if(eval_get_sign(r) == 0) + return; msbr = eval_msb(r); } }