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