Document init_ibm_float() and init_ieee_float()

This commit is contained in:
Eugen Betke 2023-10-09 11:48:15 +00:00
parent 1dfb8b4325
commit e47d12e646
2 changed files with 29 additions and 2 deletions

View File

@ -51,6 +51,11 @@ struct ibm_table_t
static ibm_table_t ibm_table = { 0, {0,}, {0,}, 0, 0 };
/**
* @brief (see the documentation for init_ieee_float() in grib_ieeefloat.cc)
*/
static void init_ibm_table()
{
if (!ibm_table.inited) {

View File

@ -56,12 +56,34 @@ struct ieee_table_t
static ieee_table_t ieee_table = { 0, {0,}, {0,}, 0, 0 };
/**
* @brief Initializes the ieee_table with IEE754 single precision (32-bit) values.
*
* Nearest smaller values (e.g., reference values for grid_simple and grid_ccsds)
* are taken from this table.
*
* @details The table layout is as follows:
*
* | idx (i) | multiplier (e) | value (v = mmin * e) |
* |---------|----------------|----------------------|
* | 1 | 2^(-149) | 0x800000 * 2^(-149) |
* | 2 | 2^(-148) | 0x800000 * 2^(-148) |
* | ... | ... | ... |
* | 253 | 2^103 | 0x800000 * 2^103 |
* | 254 | 2^104 | 0x800000 * 2^104 |
*
* The vmin and vmax boundaries are defined as:
* - vmin = 0x800000 * 2^(-149)
* - vmax = 0xffffff * 2^104
*/
static void init_ieee_table()
{
if (!ieee_table.inited) {
unsigned long i;
unsigned long mmin = 0x800000;
unsigned long mmax = 0xffffff;
unsigned long mmin = 0x800000; // minimum mantissa
unsigned long mmax = 0xffffff; // maximum mantissa
double e = 1;
for (i = 1; i <= 104; i++) {
e *= 2;