Float32与Float16转换

时间:2020-04-19 20:28:48   收藏:0   阅读:333

 参考https://stackoverflow.com/questions/3026441/float32-to-float16

#include <cstdio>
#include <cstdint>

using namespace std;

using float16_t = uint16_t;

struct Float16
{
    float16_t _value;
    Float16(float16_t value)
    {
        _value = value;
    }
    Float16(float value)
    {
        uint32_t m = *(uint32_t *)&value;
        _value = ((m & 0x7fffffff) >> 13) - (0x38000000 >> 13);
        _value |= ((m & 0x80000000) >> 16);
    }
    operator float16_t ()
    {
        return _value;
    }
    operator float ()
    {
        uint32_t m = _value;
        m = ((m & 0x7fff) << 13) + 0x38000000;
        m |= ((_value & 0x8000) << 16);
        return *(float *)&m;
    }
};

原文:https://www.cnblogs.com/JebediahKerman/p/12732941.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!