Clutter Engine 0.0.1
Loading...
Searching...
No Matches
type_float.hpp
1#pragma once
2
3#include "setup.hpp"
4
5#if GLM_COMPILER == GLM_COMPILER_VC12
6# pragma warning(push)
7# pragma warning(disable: 4512) // assignment operator could not be generated
8#endif
9
10namespace glm{
11namespace detail
12{
13 template <typename T>
14 union float_t
15 {};
16
17 // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
18 template <>
19 union float_t<float>
20 {
21 typedef int int_type;
22 typedef float float_type;
23
24 GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {}
25
26 GLM_CONSTEXPR float_t& operator=(float_t const& x)
27 {
28 f = x.f;
29 return *this;
30 }
31
32 // Portable extraction of components.
33 GLM_CONSTEXPR bool negative() const { return i < 0; }
34 GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); }
35 GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); }
36
37 int_type i;
38 float_type f;
39 };
40
41 template <>
42 union float_t<double>
43 {
44 typedef detail::int64 int_type;
45 typedef double float_type;
46
47 GLM_CONSTEXPR float_t(float_type Num = static_cast<float_type>(0)) : f(Num) {}
48
49 GLM_CONSTEXPR float_t& operator=(float_t const& x)
50 {
51 f = x.f;
52 return *this;
53 }
54
55 // Portable extraction of components.
56 GLM_CONSTEXPR bool negative() const { return i < 0; }
57 GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); }
58 GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); }
59
60 int_type i;
61 float_type f;
62 };
63}//namespace detail
64}//namespace glm
65
66#if GLM_COMPILER == GLM_COMPILER_VC12
67# pragma warning(pop)
68#endif
detail namespace with internal helper functions
Definition json.h:249
Core features
Definition common.hpp:21
Definition type_float.hpp:15