diff --git a/Core/Export/PythonFormatting.cpp b/Core/Export/PythonFormatting.cpp index 8fdfa4e56c9b7a570bb309a95f41bc4cbfa17a19..99cc6c753b7f5d49eb6c36da7b2da1a306bd4ac7 100644 --- a/Core/Export/PythonFormatting.cpp +++ b/Core/Export/PythonFormatting.cpp @@ -25,6 +25,7 @@ #include "Line.h" #include "Macros.h" #include "MultiLayer.h" +#include "Numeric.h" #include "ParameterPool.h" #include "Polygon.h" #include "ExportToPython.h" diff --git a/Core/Instrument/LLData.h b/Core/Instrument/LLData.h index baeba9435b78c2ba7af68578853f5a7501654e15..73119f742e88859df81c5fe4204bba5bf006efee 100644 --- a/Core/Instrument/LLData.h +++ b/Core/Instrument/LLData.h @@ -18,7 +18,7 @@ #include "EigenCore.h" #include "Exceptions.h" -#include "Numeric.h" +#include <limits> //! @class LLData //! @ingroup tools_internal @@ -185,10 +185,11 @@ template<class T> LLData<T>& LLData<T>::operator/=(const LLData& right) "Operation /= on LLData requires both operands to have the same dimensions"); for (size_t i=0; i<getTotalSize(); ++i) { double ratio; - if( std::abs(m_data_array[i]-right[i]) <= Numeric::double_epsilon*std::abs(right[i])) { + if( std::abs(m_data_array[i]-right[i]) <= + std::numeric_limits<double>::epsilon()*std::abs(right[i])) { ratio = 1.0; - } else if (std::abs(right[i]) <= Numeric::double_min) { - ratio = double(m_data_array[i])/Numeric::double_min; + } else if (std::abs(right[i]) <= std::numeric_limits<double>::min()) { + ratio = double(m_data_array[i])/std::numeric_limits<double>::min(); } else { ratio = double(m_data_array[i]/right[i]); } diff --git a/Core/SoftParticle/FormFactorGauss.cpp b/Core/SoftParticle/FormFactorGauss.cpp index 8c222fb75a3d0f882ec2ece0c7142191d3aa7d38..55c8c97eab9bab63ddc2ebde66c54bddcaa6f404 100644 --- a/Core/SoftParticle/FormFactorGauss.cpp +++ b/Core/SoftParticle/FormFactorGauss.cpp @@ -15,23 +15,21 @@ #include "FormFactorGauss.h" #include "BornAgainNamespace.h" -#include "Numeric.h" #include "Pi.h" #include "RealParameter.h" +#include <limits> FormFactorGauss::FormFactorGauss(double volume) -{ - m_height = std::pow(volume, 1.0/3.0); - m_width = m_height; - initialize(); -} + : FormFactorGauss( std::pow(volume, 1.0/3.0), std::pow(volume, 1.0/3.0) ) {} FormFactorGauss::FormFactorGauss(double width, double height) { m_width = width; m_height = height; - initialize(); -} + setName(BornAgain::FFGaussType); + registerParameter(BornAgain::Width, &m_width).setUnit("nm").setNonnegative(); + registerParameter(BornAgain::Height, &m_height).setUnit("nm").setNonnegative(); + m_max_ql = std::sqrt(-4 * Pi::PI * std::log(std::numeric_limits<double>::min()) / 3);} complex_t FormFactorGauss::evaluate_for_q(const cvector_t q) const { @@ -49,11 +47,3 @@ complex_t FormFactorGauss::evaluate_for_q(const cvector_t q) const return exp_I(qzHdiv2) * m_height * m_width * m_width * std::exp(-(qxr*qxr + qyr*qyr + qzh*qzh) / 4.0 / Pi::PI); } - -void FormFactorGauss::initialize() -{ - setName(BornAgain::FFGaussType); - registerParameter(BornAgain::Width, &m_width).setUnit("nm").setNonnegative(); - registerParameter(BornAgain::Height, &m_height).setUnit("nm").setNonnegative(); - m_max_ql = std::sqrt(-4 * Pi::PI * std::log(Numeric::double_min) / 3.0); -} diff --git a/Core/Tools/Numeric.cpp b/Core/Tools/Numeric.cpp index b6caab1610b151e4c99d694cdeff81dfb796e9ca..ec87d422646b1afa752f192768f1021ac7fd33b0 100644 --- a/Core/Tools/Numeric.cpp +++ b/Core/Tools/Numeric.cpp @@ -27,7 +27,6 @@ bool areAlmostEqual(double a, double b, double tolerance) { constexpr double eps = std::numeric_limits<double>::epsilon(); return std::abs(a-b) <= eps * std::max( tolerance*eps, std::max(1., tolerance)*std::abs(b) ); -// return get_relative_difference(a, b) < tolerance_factor*double_epsilon; } //! calculates safe relative difference |(a-b)/b| diff --git a/Core/Tools/Numeric.h b/Core/Tools/Numeric.h index 5e23b6ac7b06047088ba342a256193663303e64c..f1580ca7cbf664b2de469fc0d74f856b1bd51503 100644 --- a/Core/Tools/Numeric.h +++ b/Core/Tools/Numeric.h @@ -23,11 +23,8 @@ namespace Numeric { - // TODO move initialization (and #include <limits>) to .cpp static const double double_epsilon = std::numeric_limits<double>::epsilon(); -static const double double_min = std::numeric_limits<double>::min(); - //! compare two doubles bool BA_CORE_API_ areAlmostEqual(double a, double b, double tolerance_factor=1.0); diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp index 47221a8daa4d5a005cda9db8d45cea1baaad805a..99c08d8ccb20d67fa8bbac6f40a07f4af7107b7d 100644 --- a/GUI/coregui/Models/TransformFromDomain.cpp +++ b/GUI/coregui/Models/TransformFromDomain.cpp @@ -40,6 +40,7 @@ #include "Line.h" #include "MaskItems.h" #include "ModelPath.h" +#include "Numeric.h" #include "ParameterPattern.h" #include "ParticleDistributionItem.h" #include "ParticleItem.h" @@ -51,6 +52,7 @@ #include "Units.h" #include "VectorItem.h" #include <QDebug> +#include <limits> using namespace BornAgain;