PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ rt_util_float_to_float16()

uint16_t rt_util_float_to_float16 ( float  value)

Definition at line 101 of file rt_util.c.

102{
103 /*
104 * Manual half-float conversion keeps raster I/O independent of GDAL's
105 * optional Float16 helpers while preserving IEEE semantics.
106 */
107 union {
108 float f;
109 uint32_t u;
110 } v;
111
112 v.f = value;
113
114 uint32_t sign = (v.u >> 16) & 0x8000U;
115 uint32_t mantissa = v.u & 0x7fffffU;
116 int32_t exponent = ((int32_t)((v.u >> 23) & 0xffU)) - 127 + 15;
117
118 if (exponent <= 0)
119 {
120 if (exponent < -10)
121 return (uint16_t)sign;
122
123 mantissa = (mantissa | 0x800000U) >> (uint32_t)(1 - exponent);
124 return (uint16_t)(sign | ((mantissa + 0x1000U) >> 13));
125 }
126
127 if (exponent >= 31)
128 return (uint16_t)(sign | 0x7c00U | (mantissa ? 0x200U : 0));
129
130 return (uint16_t)(sign | ((uint32_t)exponent << 10) | ((mantissa + 0x1000U) >> 13));
131}
int value
Definition genraster.py:62

Referenced by rt_band_init_value(), rt_band_set_nodata(), rt_band_set_pixel(), rt_raster_serialize(), and rt_raster_to_wkb().

Here is the caller graph for this function: