diff --git a/glm/detail/func_exponential.inl b/glm/detail/func_exponential.inl index 5267ea3e..907989f4 100644 --- a/glm/detail/func_exponential.inl +++ b/glm/detail/func_exponential.inl @@ -90,6 +90,9 @@ namespace detail return detail::functor1::call(log, x); } +# if GLM_HAS_CXX11_STL + using std::exp2; +# else //exp2, ln2 = 0.69314718055994530941723212145818f template GLM_FUNC_QUALIFIER genType exp2(genType x) @@ -98,6 +101,7 @@ namespace detail return std::exp(static_cast(0.69314718055994530941723212145818) * x); } +# endif template GLM_FUNC_QUALIFIER vec exp2(vec const& x) diff --git a/test/core/core_func_exponential.cpp b/test/core/core_func_exponential.cpp index dda986c5..18517147 100644 --- a/test/core/core_func_exponential.cpp +++ b/test/core/core_func_exponential.cpp @@ -113,6 +113,12 @@ static int test_exp2() glm::vec4 E = glm::exp2(glm::vec4(4.f, 3.f, 2.f, 1.f)); Error += glm::all(glm::epsilonEqual(E, glm::vec4(16.f, 8.f, 4.f, 2.f), 0.01f)) ? 0 : 1; +# if GLM_HAS_CXX11_STL + //large exponent + float F = glm::exp2(23.f); + Error += glm::epsilonEqual(F, 8388608.f, 0.01f) ? 0 : 1; +# endif + return Error; }