pack and unpack a range of a float into a limit...

浮点数压缩与解压技术
本文介绍了一种将浮点数值范围压缩到有限位数的技术,并提供了两个实用的函数:pack_float 和 unpack_float。前者用于压缩浮点数,后者用于将其解压缩回原始值。文章通过一个示例展示了如何使用这两个函数处理特定范围内的浮点数。

Code functions that pack and unpack a range of a float into a limited number of bits.

unsigned int pack_float(float val, float minVal, float maxVal, int bits);

float unpack_float(unsigned int val, float minVal, float maxVal, int bits);

#include <iostream>
#include <cassert>

using namespace std;

// Code functions to pack and unpack a range of a float into a limited 
// number of bits:
unsigned int pack_float (float val, float minVal, float maxVal, int bits);
float unpack_float(unsigned int val, float minVal, float maxVal, int bits);

unsigned int pack_float(float val, float minVal, float maxVal, int bits)
{
    assert(bits < 32);
    assert(val >= minVal && val < maxVal);
    return (unsigned int)(1U<<bits)*(val-minVal)/(maxVal-minVal);
}

float unpack_float(unsigned int val, float minVal, float maxVal, int bits)
{
    assert(bits < 32);
    assert(val < (1U<<bits));
    return val*(maxVal-minVal)/(1U<<bits)+minVal;
}


int main(int argc, char* argv[])
{
    float val = 1234.4567;
    float minVal = 0.0;
    float maxVal = 6789.0;
    unsigned int packed = pack_float(val, minVal, maxVal, 16);
    float unpacked = unpack_float(packed, minVal, maxVal, 16);
    cout << "pack: " << packed << endl;
    cout << "unpack: " << unpacked << endl;

    return 0;
}

转载于:https://my.oschina.net/qihh/blog/94087

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值