|
|
@@ -151,22 +151,15 @@ namespace detail
|
|
|
}
|
|
|
|
|
|
// sign
|
|
|
- //Try something like based on x >> 31 to get the sign bit
|
|
|
+ // fast and works for any type
|
|
|
template <typename genFIType>
|
|
|
GLM_FUNC_QUALIFIER genFIType sign(genFIType x)
|
|
|
{
|
|
|
GLM_STATIC_ASSERT(
|
|
|
std::numeric_limits<genFIType>::is_iec559 ||
|
|
|
(std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), "'sign' only accept signed inputs");
|
|
|
-
|
|
|
- genFIType result;
|
|
|
- if(x > genFIType(0))
|
|
|
- result = genFIType(1);
|
|
|
- else if(x < genFIType(0))
|
|
|
- result = genFIType(-1);
|
|
|
- else
|
|
|
- result = genFIType(0);
|
|
|
- return result;
|
|
|
+
|
|
|
+ return genFIType(genFIType(0) < x) - (x < genFIType(0));
|
|
|
}
|
|
|
|
|
|
template <typename T, precision P, template <typename, precision> class vecType>
|