Program Listing for File math_numeric.cpp¶
↰ Return to documentation for file (lib/utilities/math_numeric.cpp
)
// ---------------------------------------------------------------------
// This file is part of falcon-core.
//
// Copyright (C) 2015, 2016, 2017 Neuro-Electronics Research Flanders
//
// Falcon-server is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Falcon-server is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with falcon-core. If not, see <http://www.gnu.org/licenses/>.
// ---------------------------------------------------------------------
#include "math_numeric.hpp"
#include <cmath>
int next_pow2(int n) {
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
n++;
return n;
}
bool compare_doubles(double A, double B, double maxAbsoluteError,
double maxRelativeError) {
// adapted from
// http://www.cygnus-software.com/papers/comparingfloats/Comparing%20floating%20point%20numbers.htm#_Toc135149453
if ((std::fabs(A - B) <= maxAbsoluteError)) {
return true;
}
double relativeError;
if (std::fabs(B) > std::fabs(A)) {
relativeError = std::fabs((A - B) / B);
} else {
relativeError = std::fabs((A - B) / A);
}
if (relativeError <= maxRelativeError) {
return true;
}
return false;
}