From 188015a7b971ebfc6cef333f3287cdd8598737d5 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Thu, 9 Feb 2023 15:17:55 +0800 Subject: [PATCH] added MergeFloat16,fixed bugs of MergeFloat32/64 --- inc/hgl/math/HalfFloat.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/inc/hgl/math/HalfFloat.h b/inc/hgl/math/HalfFloat.h index 50bd898..e771cda 100644 --- a/inc/hgl/math/HalfFloat.h +++ b/inc/hgl/math/HalfFloat.h @@ -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; } /**