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