From d8aa6c00c38f7d4f8a2fb88ccf9138537c7bd213 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Tue, 7 Jun 2016 13:31:52 +0200 Subject: [PATCH] Replace std::min/max with std::fmin/fmax for NaNs --- .../iterationsteps/projectedlinegsstep.cc | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/dune/solvers/iterationsteps/projectedlinegsstep.cc b/dune/solvers/iterationsteps/projectedlinegsstep.cc index b852c1af..542754ce 100755 --- a/dune/solvers/iterationsteps/projectedlinegsstep.cc +++ b/dune/solvers/iterationsteps/projectedlinegsstep.cc @@ -114,28 +114,19 @@ solveLocalSystem(const Dune::BTDMatrix<typename MatrixType::block_type>& matrix, for (size_t i=0; i<linearCorrection.size(); i++) { for (int j=0; j<BlockSize; j++) { - + // fmin and fmax ignore NAN values if (linearCorrection[i][j] > 0) { - - // This division can cause nan on some platforms... - if (!isnan( (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]) ) - lineSearchObs.lower(0) = std::max(lineSearchObs.lower(0), - (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]); - - if (!isnan( (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]) ) - lineSearchObs.upper(0) = std::min(lineSearchObs.upper(0), - (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]); + lineSearchObs.lower(0) = std::fmax(lineSearchObs.lower(0), + (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]); + lineSearchObs.upper(0) = std::fmin(lineSearchObs.upper(0), + (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]); } - if (linearCorrection[i][j] < 0) { - if (!isnan( (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]) ) - lineSearchObs.lower(0) = std::max(lineSearchObs.lower(0), - (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]); - if (!isnan( (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]) ) - lineSearchObs.upper(0) = std::min(lineSearchObs.upper(0), - (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]); + lineSearchObs.lower(0) = std::fmax(lineSearchObs.lower(0), + (localObstacles[i].upper(j)-x[i][j]) / linearCorrection[i][j]); + lineSearchObs.upper(0) = std::fmin(lineSearchObs.upper(0), + (localObstacles[i].lower(j)-x[i][j]) / linearCorrection[i][j]); } - } } -- GitLab