Hello John,
i switched std::numeric_limits<float128> completely to constexpr because it 
bothered me a lot. Especially:
- quiet_NaN (removed sqrt)
- has/signaling_NaN adjusted
Hope that's ok.

regards
Gero
// Copyright Christopher Kormanyos 2014.
// Copyright John Maddock 2014.
// Copyright Paul Bristow 2014.
// Distributed under the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)


// Implement quadruple-precision std::numeric_limits<> support.

#ifndef BOOST_MATH_CSTDFLOAT_LIMITS_2014_01_09_HPP_
#define BOOST_MATH_CSTDFLOAT_LIMITS_2014_01_09_HPP_

#include <boost/math/cstdfloat/cstdfloat_types.hpp>



#if defined(__GNUC__) && defined(BOOST_MATH_USE_FLOAT128)
// This is the only way we can avoid
// warning: non-standard suffix on floating constant [-Wpedantic]
// when building with -Wall -pedantic.  Neither __extension__
// nor #pragma diagnostic ignored work :(
#pragma GCC system_header
#endif



#if defined(BOOST_CSTDFLOAT_HAS_INTERNAL_FLOAT128_T) && defined(BOOST_MATH_USE_FLOAT128) && !defined(BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT)
#include <limits>

namespace std
{
template <> struct numeric_limits<boost::math::cstdfloat::detail::float_internal128_t>
{
	static constexpr bool													is_specialized		= true;
	static constexpr boost::math::cstdfloat::detail::float_internal128_t	min()				noexcept { return BOOST_CSTDFLOAT_FLOAT128_MIN; }
	static constexpr boost::math::cstdfloat::detail::float_internal128_t	max()				noexcept { return BOOST_CSTDFLOAT_FLOAT128_MAX; }
	static constexpr boost::math::cstdfloat::detail::float_internal128_t	lowest()			noexcept { return -max(); }
	static constexpr int													digits				= 113;
	static constexpr int													digits10			= 33;
	static constexpr int													max_digits10		= 36;
	static constexpr bool													is_signed			= true;
	static constexpr bool													is_integer			= false;
	static constexpr bool													is_exact			= false;
	static constexpr int													radix				= 2;
	static constexpr boost::math::cstdfloat::detail::float_internal128_t	epsilon()			noexcept { return BOOST_CSTDFLOAT_FLOAT128_EPS; }
	static constexpr boost::math::cstdfloat::detail::float_internal128_t	round_error()		noexcept { return BOOST_FLOAT128_C(0.5); }
	static constexpr int													min_exponent		= -16381;
	static constexpr int													min_exponent10		= int((min_exponent * 301L) / 1000L);
	static constexpr int													max_exponent		= +16384;
	static constexpr int													max_exponent10		= int((max_exponent * 301L) / 1000L);
	static constexpr bool													has_infinity		= true;
	static constexpr bool													has_quiet_NaN		= true;

	#if defined(__clang__) || defined(__GNUC__)
		static constexpr bool												has_signaling_NaN	= true;
	#else	//	todo other compiler
		static constexpr bool												has_signaling_NaN	= false;
	#endif

	static constexpr float_denorm_style										has_denorm			= denorm_present;
	static constexpr bool													has_denorm_loss		= false;
	static constexpr boost::math::cstdfloat::detail::float_internal128_t	infinity()			noexcept { return BOOST_FLOAT128_C(1.0) / BOOST_FLOAT128_C(0.0); }
	static constexpr boost::math::cstdfloat::detail::float_internal128_t	quiet_NaN()			noexcept { return BOOST_FLOAT128_C(0.0) / BOOST_FLOAT128_C(0.0); }

	static constexpr boost::math::cstdfloat::detail::float_internal128_t	signaling_NaN()		noexcept
	{
	#if defined(__clang__) || defined(__GNUC__)
		return __builtin_nansf128("");
	#else	//	todo other compiler
		return BOOST_FLOAT128_C(0.0);
	#endif
	}

	static constexpr boost::math::cstdfloat::detail::float_internal128_t	denorm_min()		noexcept { return BOOST_CSTDFLOAT_FLOAT128_DENORM_MIN; }
	static constexpr bool													is_iec559			= true;
	static constexpr bool													is_bounded			= true;
	static constexpr bool													is_modulo			= false;
	static constexpr bool													traps				= false;
	static constexpr bool													tinyness_before		= false;
	static constexpr float_round_style										round_style			= round_to_nearest;
};

}	// namespace std

#endif // Not BOOST_CSTDFLOAT_NO_LIBQUADMATH_SUPPORT (i.e., the user would like to have libquadmath support)

#endif // BOOST_MATH_CSTDFLOAT_LIMITS_2014_01_09_HPP_

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to