1 | var sign = require('../internals/math-sign');
|
2 |
|
3 | var abs = Math.abs;
|
4 | var pow = Math.pow;
|
5 | var EPSILON = pow(2, -52);
|
6 | var EPSILON32 = pow(2, -23);
|
7 | var MAX32 = pow(2, 127) * (2 - EPSILON32);
|
8 | var MIN32 = pow(2, -126);
|
9 |
|
10 | var roundTiesToEven = function (n) {
|
11 | return n + 1 / EPSILON - 1 / EPSILON;
|
12 | };
|
13 |
|
14 |
|
15 |
|
16 | module.exports = Math.fround || function fround(x) {
|
17 | var $abs = abs(x);
|
18 | var $sign = sign(x);
|
19 | var a, result;
|
20 | if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
|
21 | a = (1 + EPSILON32 / EPSILON) * $abs;
|
22 | result = a - (a - $abs);
|
23 |
|
24 | if (result > MAX32 || result != result) return $sign * Infinity;
|
25 | return $sign * result;
|
26 | };
|