template T half2int()

in include/half.hpp [1317:1344]


		template<std::float_round_style R,bool E,bool I,typename T> T half2int(unsigned int value)
		{
			unsigned int abs = value & 0x7FFF;
			if(abs >= 0x7C00)
			{
				raise(FE_INVALID);
				return (value&0x8000) ? std::numeric_limits<T>::min() : std::numeric_limits<T>::max();
			}
			if(abs < 0x3800)
			{
				raise(FE_INEXACT, I);
				return	(R==std::round_toward_infinity) ? T(~(value>>15)&(abs!=0)) :
						(R==std::round_toward_neg_infinity) ? -T(value>0x8000) :
						T();
			}
			int exp = 25 - (abs>>10);
			unsigned int m = (value&0x3FF) | 0x400;
			int32 i = static_cast<int32>((exp<=0) ? (m<<-exp) : ((m+(
				(R==std::round_to_nearest) ? ((1<<(exp-1))-(~(m>>exp)&E)) :
				(R==std::round_toward_infinity) ? (((1<<exp)-1)&((value>>15)-1)) :
				(R==std::round_toward_neg_infinity) ? (((1<<exp)-1)&-(value>>15)) : 0))>>exp));
			if((!std::numeric_limits<T>::is_signed && (value&0x8000)) || (std::numeric_limits<T>::digits<16 &&
				((value&0x8000) ? (-i<std::numeric_limits<T>::min()) : (i>std::numeric_limits<T>::max()))))
				raise(FE_INVALID);
			else if(I && exp > 0 && (m&((1<<exp)-1)))
				raise(FE_INEXACT);
			return static_cast<T>((value&0x8000) ? -i : i);
		}