diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2018-05-23 02:06:52 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2018-05-23 02:06:52 +0200 |
commit | fd7111241a90b00eed45c7fb847101c732b9df83 (patch) | |
tree | 5c85e7f88dee579baa54ff2aa663efa61e4414d5 | |
parent | 03fe3b83eb95a20a3397a0b5c19c25f02986c888 (diff) | |
download | cppunit-fd7111241a90b00eed45c7fb847101c732b9df83.tar.gz |
C++11 provides std::isfinite and std::isnan
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | include/cppunit/portability/FloatingPoint.h | 41 | ||||
-rw-r--r-- | m4/README | 1 |
4 files changed, 3 insertions, 42 deletions
diff --git a/Makefile.am b/Makefile.am index 674afd3..90c6a1c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -32,7 +32,6 @@ m4internal = \ m4/ac_cxx_string_compare_string_first.m4 \ m4/ac_dll.m4 \ m4/ax_cxx_gcc_abi_demangle.m4 \ - m4/ax_cxx_have_isfinite.m4 \ m4/ax_cxx_have_sstream.m4 \ m4/ax_cxx_namespaces.m4 \ m4/ax_cxx_compile_stdcxx_11.m4 \ diff --git a/configure.ac b/configure.ac index b34947a..21172f0 100644 --- a/configure.ac +++ b/configure.ac @@ -38,8 +38,6 @@ AC_LIBTOOL_WIN32_DLL AC_HEADER_STDC AC_LTDL_DLLIB AC_CHECK_HEADERS(cmath,[],[],[/**/]) -AX_CXX_HAVE_ISFINITE -AC_CHECK_FUNCS(finite) AX_CXX_HAVE_SSTREAM AC_CXX_HAVE_STRSTREAM diff --git a/include/cppunit/portability/FloatingPoint.h b/include/cppunit/portability/FloatingPoint.h index 15bf95b..56138fa 100644 --- a/include/cppunit/portability/FloatingPoint.h +++ b/include/cppunit/portability/FloatingPoint.h @@ -2,39 +2,13 @@ #define CPPUNIT_PORTABILITY_FLOATINGPOINT_H_INCLUDED #include <cppunit/Portability.h> -#include <math.h> - -#if defined(__sun) && !defined(CPPUNIT_HAVE_ISFINITE) && defined(CPPUNIT_HAVE_FINITE) -#include <ieeefp.h> - // <math.h> is still needed for usage of fabs in TestAssert.cpp -#endif +#include <cmath> CPPUNIT_NS_BEGIN -/// \brief Tests if a floating-point is a NaN. -// According to IEEE-754 floating point standard, -// (see e.g. page 8 of -// http://www.cs.berkeley.edu/~wkahan/ieee754status/ieee754.ps) -// all comparisons with NaN are false except "x != x", which is true. -// -// At least Microsoft Visual Studio 6 is known not to implement this test correctly. -// It emits the following code to test equality: -// fcomp qword ptr [nan] -// fnstsw ax // copie fp (floating-point) status register to ax -// test ah,40h // test bit 14 of ax (0x4000) => C3 of fp status register -// According to the following documentation on the x86 floating point status register, -// the C2 bit should be tested to test for NaN value. -// http://webster.cs.ucr.edu/AoA/Windows/HTML/RealArithmetic.html#1000117 -// In Microsoft Visual Studio 2003 & 2005, the test is implemented with: -// test ah,44h // Visual Studio 2005 test both C2 & C3... -// -// To work around this, a NaN is assumed to be detected if no strict ordering is found. inline bool floatingPointIsUnordered( double x ) { - // x != x will detect a NaN on conformant platform - // (2.0 < x && x < 1.0) will detect a NaN on non conformant platform: - // => no ordering can be found for x. - return (x != x) || (2.0 < x && x < 1.0); + return std::isnan(x); } @@ -42,16 +16,7 @@ inline bool floatingPointIsUnordered( double x ) /// @return \c true if x is neither a NaN, nor +inf, nor -inf, \c false otherwise. inline int floatingPointIsFinite( double x ) { -#if defined(CPPUNIT_HAVE_ISFINITE) - return isfinite( x ); -#elif defined(CPPUNIT_HAVE_FINITE) - return finite( x ); -#elif defined(CPPUNIT_HAVE__FINITE) - return _finite(x); -#else - double testInf = x * 0.0; // Produce 0.0 if x is finite, a NaN otherwise. - return testInf == 0.0 && !floatingPointIsUnordered(testInf); -#endif + return std::isfinite(x); } CPPUNIT_NS_END @@ -3,6 +3,5 @@ # Exceptions internal code: # bb_enable_doxygen.m4 # ac_cxx_string_compare_string_first.m4 -# ax_cxx_have_isfinite.m4 # ac_dll.m4 # ac_cxx_have_strstream.m4 |