diff --git a/glm/gtx/ulp.inl b/glm/gtx/ulp.inl index 253f5b4e..931c33c4 100644 --- a/glm/gtx/ulp.inl +++ b/glm/gtx/ulp.inl @@ -15,13 +15,14 @@ namespace ulp { inline std::size_t ulp ( - double const & a, - double const & b + half const & a, + half const & b ) { std::size_t Count = 0; - double Temp = a; - while((Temp = nextafterf(Temp, b)) != b) + float TempA = a; + float TempB = b; + while((TempA = nextafterf(TempA, TempB)) != TempB) ++Count; return Count; } @@ -38,6 +39,59 @@ namespace ulp ++Count; return Count; } + + inline std::size_t ulp + ( + double const & a, + double const & b + ) + { + std::size_t Count = 0; + double Temp = a; + while((Temp = nextafter(Temp, b)) != b) + ++Count; + return Count; + } + + template + inline detail::xvec2 ulp + ( + detail::xvec2 const & a, + detail::xvec2 const & b + ) + { + return detail::xvec2( + ulp(a[0], b[0]), + ulp(a[1], b[1])); + } + + template + inline detail::xvec3 ulp + ( + detail::xvec3 const & a, + detail::xvec3 const & b + ) + { + return detail::xvec2( + ulp(a[0], b[0]), + ulp(a[1], b[1]), + ulp(a[2], b[2])); + } + + template + inline detail::xvec4 ulp + ( + detail::xvec4 const & a, + detail::xvec4 const & b + ) + { + return detail::xvec2( + ulp(a[0], b[0]), + ulp(a[1], b[1]), + ulp(a[2], b[2]), + ulp(a[3], b[3])); + } + }//namespace ulp }//namespace gtx }//namespace glm