blob: 69157cad26680132e22283413b5cb725d48d77c7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#include "../common.hpp"
#include "../ext/scalar_int_sized.hpp"
#include "../ext/scalar_uint_sized.hpp"
#include "../detail/type_float.hpp"
namespace glm
{
template<typename genType>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon)
{
return abs(x - y) <= epsilon;
}
template<typename genType>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon)
{
return abs(x - y) > epsilon;
}
template<typename genType>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs)
{
detail::float_t<genType> const a(x);
detail::float_t<genType> const b(y);
// Different signs means they do not match.
if(a.negative() != b.negative())
return false;
// Find the difference in ULPs.
typename detail::float_t<genType>::int_type const DiffULPs = abs(a.i - b.i);
return DiffULPs <= MaxULPs;
}
template<typename genType>
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs)
{
return !equal(x, y, ULPs);
}
}//namespace glm
|