// doesn't currently guard under/overflow static long float32_pack(float val) { int sign = 0; int exp; int mant; if (val < 0) { sign = 0x80000000; val = -val; } exp = (int) Math.floor(Math.log(val) / Math.log(2)); mant = (int) Math.rint(Math.pow(val, (VQ_FMAN - 1) - exp)); exp = (exp + VQ_FEXP_BIAS) << VQ_FMAN; return (sign | exp | mant); }