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