parent
311f59ed7e
commit
b2a7f1093c
4 changed files with 56 additions and 19 deletions
@ -0,0 +1,48 @@ |
||||
#pragma once |
||||
|
||||
#include "setup.hpp" |
||||
|
||||
namespace glm{ |
||||
namespace detail |
||||
{ |
||||
template <typename T> |
||||
union float_t |
||||
{}; |
||||
|
||||
// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
|
||||
template <> |
||||
union float_t<float> |
||||
{ |
||||
typedef int int_type; |
||||
typedef float float_type; |
||||
|
||||
GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {} |
||||
|
||||
// Portable extraction of components.
|
||||
GLM_CONSTEXPR bool negative() const { return i < 0; } |
||||
GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); } |
||||
GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); } |
||||
|
||||
int_type const i; |
||||
float_type const f; |
||||
}; |
||||
|
||||
template <> |
||||
union float_t<double> |
||||
{ |
||||
typedef detail::int64 int_type; |
||||
typedef double float_type; |
||||
|
||||
GLM_CONSTEXPR float_t(float_type Num = static_cast<float_type>(0)) : f(Num) {} |
||||
|
||||
// Portable extraction of components.
|
||||
GLM_CONSTEXPR bool negative() const { return i < 0; } |
||||
GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); } |
||||
GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); } |
||||
|
||||
int_type const i; |
||||
float_type const f; |
||||
}; |
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
Loading…
Reference in New Issue