码迷,mamicode.com
首页 > 其他好文 > 详细

Float32与Float16转换

时间:2020-04-19 19:40:15      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:space   struct   col   tac   turn   nbsp   using   oat   pac   

 参考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;
    }
};

Float32与Float16转换

标签:space   struct   col   tac   turn   nbsp   using   oat   pac   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!