/////////////////////////////////////////////////////////////////////////////////////////////////// // OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) /////////////////////////////////////////////////////////////////////////////////////////////////// // Created : 2006-01-04 // Updated : 2011-10-14 // Licence : This source is under MIT License // File : glm/gtx/fast_square_root.inl /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm { // fastSqrt template GLM_FUNC_QUALIFIER genType fastSqrt ( genType const & x ) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastSqrt' only accept floating-point input"); return genType(1) / fastInverseSqrt(x); } VECTORIZE_VEC(fastSqrt) // fastInversesqrt template <> GLM_FUNC_QUALIFIER float fastInverseSqrt(float const & x) { # ifdef __CUDACC__ // Wordaround for a CUDA compiler bug up to CUDA6 detail::tvec1 tmp(detail::compute_inversesqrt::call(detail::tvec1(x))); return tmp.x; # else return detail::compute_inversesqrt::call(detail::tvec1(x)).x; # endif } template <> GLM_FUNC_QUALIFIER double fastInverseSqrt(double const & x) { # ifdef __CUDACC__ // Wordaround for a CUDA compiler bug up to CUDA6 detail::tvec1 tmp(detail::compute_inversesqrt::call(detail::tvec1(x))); return tmp.x; # else return detail::compute_inversesqrt::call(detail::tvec1(x)).x; # endif } template