in include/half.hpp [849:868]
template<std::float_round_style R,bool E,bool I> unsigned int integral(unsigned int value)
{
unsigned int abs = value & 0x7FFF;
if(abs < 0x3C00)
{
raise(FE_INEXACT, I);
return ((R==std::round_to_nearest) ? (0x3C00&-static_cast<unsigned>(abs>=(0x3800+E))) :
(R==std::round_toward_infinity) ? (0x3C00&-(~(value>>15)&(abs!=0))) :
(R==std::round_toward_neg_infinity) ? (0x3C00&-static_cast<unsigned>(value>0x8000)) :
0) | (value&0x8000);
}
if(abs >= 0x6400)
return (abs>0x7C00) ? signal(value) : value;
unsigned int exp = 25 - (abs>>10), mask = (1<<exp) - 1;
raise(FE_INEXACT, I && (value&mask));
return (( (R==std::round_to_nearest) ? ((1<<(exp-1))-(~(value>>exp)&E)) :
(R==std::round_toward_infinity) ? (mask&((value>>15)-1)) :
(R==std::round_toward_neg_infinity) ? (mask&-(value>>15)) :
0) + value) & ~mask;
}