diff --git a/dune/solvers/solvers/loopsolver.cc b/dune/solvers/solvers/loopsolver.cc
index 799f05df063b698db87277d0fd1f1a1070aca97e..d33da8ff31d0f37c0c70a95646f49165c7c8056b 100644
--- a/dune/solvers/solvers/loopsolver.cc
+++ b/dune/solvers/solvers/loopsolver.cc
@@ -112,8 +112,9 @@ void ::LoopSolver<VectorType, BitVectorType>::solve()
         }
 
         // Turn the error into the relative error, if requested
-        if (this->useRelativeError_ && !std::isnan(error/oldNorm))
-            error = error / oldNorm;
+        if (this->useRelativeError_ && error != 0)
+            error = (oldNorm == 0) ? std::numeric_limits<real_type>::max()
+                                   : error / oldNorm;
 
         if (!std::isinf(convRate) && !std::isnan(convRate) && i>0)
         {