added MergeFloat16,fixed bugs of MergeFloat32/64

This commit is contained in:
2023-02-09 15:17:55 +08:00
parent eae442ce66
commit 188015a7b9

View File

@@ -29,14 +29,23 @@ namespace hgl
mantissa=(*p&0x000FFFFFFFFFFFFF);
}
constexpr float MergeFloat(const bool sign_bit,const uint exponent,const uint mantissa)
constexpr half_float MergeFloat16(const bool sign_bit,const uint exponent,const uint mantissa)
{
return float((sign_bit?0x80000000:0)|(exponent<<23)|mantissa);
return half_float((sign_bit?0x8000:0)|(exponent<<10)|mantissa);
}
constexpr float MergeFloat32(const bool sign_bit,const uint exponent,const uint mantissa)
{
uint32 value=((sign_bit?0x80000000:0)|(exponent<<23)|mantissa);
return *(float *)&value;
}
constexpr double MergeFloat64(const bool sign_bit,const uint exponent,const uint64 mantissa)
{
return double((sign_bit?0x8000000000000000:0)|(uint64(exponent)<<52)|mantissa);
uint64 value=((sign_bit?0x8000000000000000:0)|(uint64(exponent)<<52)|mantissa);
return *(double *)&value;
}
/**