diff --git a/glm/gtx/ulp.inl b/glm/gtx/ulp.inl index f5cb0d8d..bd2e3430 100644 --- a/glm/gtx/ulp.inl +++ b/glm/gtx/ulp.inl @@ -54,42 +54,54 @@ namespace ulp } template - inline detail::xvec2 ulp + inline std::size_t ulp ( detail::xvec2 const & a, detail::xvec2 const & b ) { - return detail::xvec2( - ulp(a[0], b[0]), - ulp(a[1], b[1])); + std::size_t ulps[] = + { + ulp(a[0], b[0]), + ulp(a[1], b[1]) + }; + + return glm::max(ulps[0], ulps[1])s; } template - inline detail::xvec3 ulp + inline std::size_t ulp ( detail::xvec3 const & a, detail::xvec3 const & b ) { - return detail::xvec3( - ulp(a[0], b[0]), - ulp(a[1], b[1]), - ulp(a[2], b[2])); + std::size_t ulps[] = + { + ulp(a[0], b[0]), + ulp(a[1], b[1]), + ulp(a[2], b[2]) + }; + + return glm::max(glm::max(ulps[0], ulps[1]), ulps[2]); } template - inline detail::xvec4 ulp + inline std::size_t ulp ( detail::xvec4 const & a, detail::xvec4 const & b ) { - return detail::xvec4( - ulp(a[0], b[0]), - ulp(a[1], b[1]), - ulp(a[2], b[2]), - ulp(a[3], b[3])); + std::size_t ulps[] = + { + ulp(a[0], b[0]), + ulp(a[1], b[1]), + ulp(a[2], b[2]), + ulp(a[3], b[3]) + }; + + return glm::max(glm::max(ulps[0], ulps[1]), glm::max(ulps[2], ulps[3])); } }//namespace ulp diff --git a/test/gtx/gtx-ulp.cpp b/test/gtx/gtx-ulp.cpp index e69de29b..ee1bd3e9 100644 --- a/test/gtx/gtx-ulp.cpp +++ b/test/gtx/gtx-ulp.cpp @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2011-04-26 +// Updated : 2011-04-26 +// Licence : This source is under MIT licence +// File : test/gtx/ulp.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int test_ulp_float() +{ + std::size_t A = ulp(0.01, 0.02); + std::size_t B = ulp(glm::vec2(0.01), glm::vec2(0.02)); + std::size_t C = ulp(glm::vec3(0.01), glm::vec3(0.02)); + std::size_t D = ulp(glm::vec4(0.01), glm::vec4(0.02)); + std::cout << "glm::ulp test: " << A << std::endl; + std::cout << "glm::ulp test: " << B << std::endl; + std::cout << "glm::ulp test: " << C << std::endl; + std::cout << "glm::ulp test: " << D << std::endl; + return 0; +} + +int main() +{ + test_ulp_float(); +} + +