print_hexfloat = {
const flt_arr = new Float64Array([1]);
const int_arr = new Int32Array(flt_arr.buffer);
const SIGN_MASK = 0x7fffffff;
const EXP_MASK = 0x7ff00000;
const HI = little_endian, LO = 1 - little_endian;
return (x) => {
if (isNaN(x)) return `NaN`;
if (!isFinite(x)) return `${x < 0 ? '-' : '+'}Infinity`;
if (x === 0) return `${1/x < 0 ? '-' : '+'}0x0.0000000000000p+0000`;
flt_arr[0] = x;
var exp = ((int_arr[HI] & EXP_MASK) >> 20) - 0x3ff;
if (exp == -1023) {
flt_arr[0] = x * 2 ** 1023;
exp += ((int_arr[HI] & EXP_MASK) >> 20) - 0x3ff;
}
int_arr[HI] = (int_arr[HI] & ~EXP_MASK) ^ 0x3ff00000;
var minus = !!(int_arr[HI] & ~SIGN_MASK) ? '-' : '+';
int_arr[HI] = int_arr[HI] & SIGN_MASK;
var hex = flt_arr[0].toString(16) + ((flt_arr[0] === 1) ? '.' : '');
hex = (hex + '0000000000000').slice(0, 15);
var expstr = (exp >= 0 ? '+' : '-') + ('0000' + Math.abs(exp)).slice(-4);
return `${minus}0x${hex}p${expstr}`;
}
}