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