Skip to content
Snippets Groups Projects
Commit 594099fc authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

MSVC: isnan and isinf moved into MathFunctions to be platform independent

parent a660d7b6
No related branches found
No related tags found
No related merge requests found
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include <cassert> #include <cassert>
#include <iostream> #include <iostream>
#include <cmath>
void DecouplingApproximationStrategy::init( void DecouplingApproximationStrategy::init(
const SafePointerVector<FormFactorInfo>& form_factor_infos, const SafePointerVector<FormFactorInfo>& form_factor_infos,
...@@ -43,17 +42,17 @@ double DecouplingApproximationStrategy::evaluate( ...@@ -43,17 +42,17 @@ double DecouplingApproximationStrategy::evaluate(
complex_t ff = complex_t ff =
m_ff_infos[i]->mp_ff->evaluate(k_i, k_f_bin, alpha_i, alpha_f); m_ff_infos[i]->mp_ff->evaluate(k_i, k_f_bin, alpha_i, alpha_f);
if (std::isnan(ff.real())) { if (MathFunctions::isnan(ff.real())) {
std::cout << "Amplitude is NaN: i = " << i << std::endl; std::cout << "Amplitude is NaN: i = " << i << std::endl;
} }
double fraction = m_ff_infos[i]->m_abundance; double fraction = m_ff_infos[i]->m_abundance;
amplitude += fraction*ff; amplitude += fraction*ff;
intensity += fraction*(std::norm(ff)); intensity += fraction*(std::norm(ff));
assert(!std::isnan(amplitude.real())); assert(!MathFunctions::isnan(amplitude.real()));
assert(!std::isnan(amplitude.imag())); assert(!MathFunctions::isnan(amplitude.imag()));
assert(!std::isinf(amplitude.real())); assert(!MathFunctions::isinf(amplitude.real()));
assert(!std::isinf(amplitude.imag())); assert(!MathFunctions::isinf(amplitude.imag()));
} }
double amplitude_norm = std::norm(amplitude); double amplitude_norm = std::norm(amplitude);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "LocalMonodisperseApproximationStrategy.h" #include "LocalMonodisperseApproximationStrategy.h"
#include "Exceptions.h" #include "Exceptions.h"
#include "MathFunctions.h
#include <cassert> #include <cassert>
...@@ -58,8 +59,8 @@ double LocalMonodisperseApproximationStrategy::evaluate(const cvector_t& k_i, ...@@ -58,8 +59,8 @@ double LocalMonodisperseApproximationStrategy::evaluate(const cvector_t& k_i,
intensity += fraction*(itf_function*std::norm(ff)); intensity += fraction*(itf_function*std::norm(ff));
} }
} }
assert(!std::isnan(intensity)); assert(!MathFunctions::isnan(intensity));
assert(!std::isinf(intensity)); assert(!MathFunctions::isinf(intensity));
return intensity; return intensity;
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <cstdlib> #include <cstdlib>
#include <vector> #include <vector>
#include <cmath>
#include "gsl/gsl_sf_bessel.h" #include "gsl/gsl_sf_bessel.h"
#include "gsl/gsl_sf_trig.h" #include "gsl/gsl_sf_trig.h"
...@@ -93,6 +94,25 @@ void FastSinCos(const complex_t &x, complex_t &xsin, complex_t &xcos); ...@@ -93,6 +94,25 @@ void FastSinCos(const complex_t &x, complex_t &xsin, complex_t &xcos);
Eigen::Matrix2d Norm(Eigen::Matrix2cd &M); Eigen::Matrix2d Norm(Eigen::Matrix2cd &M);
#endif #endif
BA_CORE_API_ bool isnan(double x)
{
#ifdef _MSC_VER
return _isnan(x);
#else
return std::isnan(x);
#endif
}
BA_CORE_API_ bool isinf(double x)
{
#ifdef _MSC_VER
return !_finite(x);
#else
return std::isinf(x);
#endif
}
} // Namespace MathFunctions } // Namespace MathFunctions
inline double MathFunctions::GenerateNormalRandom(double average, double std_dev) inline double MathFunctions::GenerateNormalRandom(double average, double std_dev)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment