1234567891011121314151617181920212223242526 |
- // 20.2.2.16 Math.fround(x)
- var $export = require('./$.export')
- , sign = require('./$.math-sign')
- , pow = Math.pow
- , EPSILON = pow(2, -52)
- , EPSILON32 = pow(2, -23)
- , MAX32 = pow(2, 127) * (2 - EPSILON32)
- , MIN32 = pow(2, -126);
- var roundTiesToEven = function(n){
- return n + 1 / EPSILON - 1 / EPSILON;
- };
- $export($export.S, 'Math', {
- fround: function fround(x){
- var $abs = Math.abs(x)
- , $sign = sign(x)
- , a, result;
- if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
- a = (1 + EPSILON32 / EPSILON) * $abs;
- result = a - (a - $abs);
- if(result > MAX32 || result != result)return $sign * Infinity;
- return $sign * result;
- }
- });
|