@ Тодзи: Большое спасибо!Вот версия с оптимизацией для NON мощных двигателей, таких как V8
var pow = Math.pow;
function decodeFloat16 (binary) {"use strict";
var exponent = (binary & 0x7C00) >> 10,
fraction = binary & 0x03FF;
return (binary >> 15 ? -1 : 1) * (
exponent ?
(
exponent === 0x1F ?
fraction ? NaN : Infinity :
pow(2, exponent - 15) * (1 + fraction / 0x400)
) :
6.103515625e-5 * (fraction / 0x400)
);
};
и более полный тест IEEE 754:
function test() {
var samples = [
0x3C00, // = 1
0xC000, // = −2
0x7BFF, // = 6.5504 × 10^4 (max half precision)
0x0400, // = 2^−14 ≈ 6.10352 × 10^−5 (minimum positive normal)
0x0001, // = 2^−24 ≈ 5.96046 × 10^−8 (minimum strictly positive subnormal)
0x0000, // = 0
0x8000, // = −0
0x7C00, // = Infinity
0xFC00, // = −Infinity
0x3555, // ≈ 0.33325... ≈ 1/3
0x7C01 // = NaN
],
i = samples.length;
while (i--) samples[i] = decodeFloat16(samples[i]);
return samples.join("\n");
};
Результаты теста производительности по сравнению с исходным кодом Toji:
- Chrome 17: +30%
- Safari 5.1: -10% (не спрашивайте меня, почему)
- Firefox 9: +11%
- IExplorer 9: +22%
- IExplorer 7: +14%