|  |  | @ -82,13 +82,13 @@ namespace detail | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if((ix>0x7f800000) ||	// x is nan |  |  |  | 		if((ix>0x7f800000) ||	// x is nan | 
			
		
	
		
		
			
				
					
					|  |  |  | 			(iy>0x7f800000))	// y is nan |  |  |  | 			(iy>0x7f800000))	// y is nan | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return x+y; |  |  |  | 			return x+y; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(compute_equal<float>::call(x, y)) |  |  |  | 		if(compute_equal<float, std::numeric_limits<float>::is_iec559>::call(x, y)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			return y;		// x=y, return y |  |  |  | 			return y;		// x=y, return y | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(ix==0) |  |  |  | 		if(ix==0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{				// x == 0 |  |  |  | 		{				// x == 0 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			GLM_SET_FLOAT_WORD(x,(hy&0x80000000)|1);// return +-minsubnormal |  |  |  | 			GLM_SET_FLOAT_WORD(x,(hy&0x80000000)|1);// return +-minsubnormal | 
			
		
	
		
		
			
				
					
					|  |  |  | 			t = x*x; |  |  |  | 			t = x*x; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(detail::compute_equal<float>::call(t, x)) |  |  |  | 			if(detail::compute_equal<float, true>::call(t, x)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 				return t; |  |  |  | 				return t; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			else |  |  |  | 			else | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return x;	// raise underflow flag |  |  |  | 				return x;	// raise underflow flag | 
			
		
	
	
		
		
			
				
					|  |  | @ -113,7 +113,7 @@ namespace detail | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(hy<0x00800000)		// underflow |  |  |  | 		if(hy<0x00800000)		// underflow | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			t = x*x; |  |  |  | 			t = x*x; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(!detail::compute_equal<float>::call(t, x)) |  |  |  | 			if(!detail::compute_equal<float, true>::call(t, x)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			{					// raise underflow flag |  |  |  | 			{					// raise underflow flag | 
			
		
	
		
		
			
				
					
					|  |  |  | 				GLM_SET_FLOAT_WORD(y,hx); |  |  |  | 				GLM_SET_FLOAT_WORD(y,hx); | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return y; |  |  |  | 				return y; | 
			
		
	
	
		
		
			
				
					|  |  | @ -137,13 +137,13 @@ namespace detail | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) ||	// x is nan |  |  |  | 		if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) ||	// x is nan | 
			
		
	
		
		
			
				
					
					|  |  |  | 			((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0))	// y is nan |  |  |  | 			((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0))	// y is nan | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return x+y; |  |  |  | 			return x+y; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(detail::compute_equal<double>::call(x, y)) |  |  |  | 		if(detail::compute_equal<double, true>::call(x, y)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			return y;									// x=y, return y |  |  |  | 			return y;									// x=y, return y | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if((ix|lx)==0) |  |  |  | 		if((ix|lx)==0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{													// x == 0 |  |  |  | 		{													// x == 0 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			GLM_INSERT_WORDS(x, hy & 0x80000000, 1);		// return +-minsubnormal |  |  |  | 			GLM_INSERT_WORDS(x, hy & 0x80000000, 1);		// return +-minsubnormal | 
			
		
	
		
		
			
				
					
					|  |  |  | 			t = x*x; |  |  |  | 			t = x*x; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(detail::compute_equal<double>::call(t, x)) |  |  |  | 			if(detail::compute_equal<double, true>::call(t, x)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 				return t; |  |  |  | 				return t; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			else |  |  |  | 			else | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return x;   // raise underflow flag |  |  |  | 				return x;   // raise underflow flag | 
			
		
	
	
		
		
			
				
					|  |  | @ -171,7 +171,7 @@ namespace detail | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(hy<0x00100000) |  |  |  | 		if(hy<0x00100000) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{						// underflow |  |  |  | 		{						// underflow | 
			
		
	
		
		
			
				
					
					|  |  |  | 			t = x*x; |  |  |  | 			t = x*x; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(!detail::compute_equal<double>::call(t, x)) |  |  |  | 			if(!detail::compute_equal<double, true>::call(t, x)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			{					// raise underflow flag |  |  |  | 			{					// raise underflow flag | 
			
		
	
		
		
			
				
					
					|  |  |  | 				GLM_INSERT_WORDS(y,hx,lx); |  |  |  | 				GLM_INSERT_WORDS(y,hx,lx); | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return y; |  |  |  | 				return y; | 
			
		
	
	
		
		
			
				
					|  |  | 
 |