11 return std::nextafter(x, std::numeric_limits<float>::max());
12# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
13 return detail::nextafterf(x, FLT_MAX);
14# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
15 return __builtin_nextafterf(x, FLT_MAX);
17 return nextafterf(x, FLT_MAX);
25 return std::nextafter(x, std::numeric_limits<double>::max());
26# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
27 return detail::nextafter(x, std::numeric_limits<double>::max());
28# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
29 return __builtin_nextafter(x, DBL_MAX);
31 return nextafter(x, DBL_MAX);
38 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559,
"'next_float' only accept floating-point input");
42 for (
int i = 0; i < ULPs; ++i)
50 return std::nextafter(x, std::numeric_limits<float>::min());
51# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
52 return detail::nextafterf(x, FLT_MIN);
53# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
54 return __builtin_nextafterf(x, FLT_MIN);
56 return nextafterf(x, FLT_MIN);
63 return std::nextafter(x, std::numeric_limits<double>::min());
64# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
65 return _nextafter(x, DBL_MIN);
66# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
67 return __builtin_nextafter(x, DBL_MIN);
69 return nextafter(x, DBL_MIN);
76 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559,
"'prev_float' only accept floating-point input");
80 for (
int i = 0; i < ULPs; ++i)
90 return abs(a.i - b.i);
98 return abs(a.i - b.i);
101 template<length_t L,
typename T, qualifier Q>
105 for (length_t i = 0, n = Result.length(); i < n; ++i)
110 template<length_t L,
typename T, qualifier Q>
114 for (length_t i = 0, n = Result.length(); i < n; ++i)
119 template<length_t L,
typename T, qualifier Q>
123 for (length_t i = 0, n = Result.length(); i < n; ++i)
128 template<length_t L,
typename T, qualifier Q>
132 for (length_t i = 0, n = Result.length(); i < n; ++i)
137 template<length_t L,
typename T, qualifier Q>
141 for (length_t i = 0, n = Result.length(); i < n; ++i)
146 template<length_t L,
typename T, qualifier Q>
150 for (length_t i = 0, n = Result.length(); i < n; ++i)
155 template<length_t L, qualifier Q>
156 GLM_FUNC_QUALIFIER vec<L, int, Q>
float_distance(vec<L, float, Q>
const& x, vec<L, float, Q>
const& y)
158 vec<L, int, Q> Result;
159 for (length_t i = 0, n = Result.length(); i < n; ++i)
164 template<length_t L, qualifier Q>
165 GLM_FUNC_QUALIFIER vec<L, int64, Q>
float_distance(vec<L, double, Q>
const& x, vec<L, double, Q>
const& y)
167 vec<L, int64, Q> Result;
168 for (length_t i = 0, n = Result.length(); i < n; ++i)
GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x)
detail::int64 int64
64 bit signed integer type.
Definition scalar_int_sized.hpp:67
Core features
Definition common.hpp:21
GLM_FUNC_DECL int float_distance(float x, float y)
Definition ulp.inl:85
GLM_FUNC_DECL genType next_float(genType x)
GLM_FUNC_DECL genType prev_float(genType x)
Definition qualifier.hpp:35
Definition type_float.hpp:15