You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
716 B
23 lines
716 B
// 20.2.2.16 Math.fround(x) |
|
var sign = require('./_math-sign'); |
|
var pow = Math.pow; |
|
var EPSILON = pow(2, -52); |
|
var EPSILON32 = pow(2, -23); |
|
var MAX32 = pow(2, 127) * (2 - EPSILON32); |
|
var MIN32 = pow(2, -126); |
|
|
|
var roundTiesToEven = function (n) { |
|
return n + 1 / EPSILON - 1 / EPSILON; |
|
}; |
|
|
|
module.exports = Math.fround || function fround(x) { |
|
var $abs = Math.abs(x); |
|
var $sign = sign(x); |
|
var a, result; |
|
if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; |
|
a = (1 + EPSILON32 / EPSILON) * $abs; |
|
result = a - (a - $abs); |
|
// eslint-disable-next-line no-self-compare |
|
if (result > MAX32 || result != result) return $sign * Infinity; |
|
return $sign * result; |
|
};
|
|
|