Currently my code to extract the sign (s), significand (m), exponent (e),
radix (b) from Number is as follows. This is slow, is there a better way to
get these desirable values?
++++code here++++
IEEE.split = function (x)
{
x = +x; // guard against non-numerics
var s, m, e, abs;
// handle NaN, infinities, zeroes
if (isNaN( x )) {
return {s: 0, m: Number.NaN, e: Number.NaN, b: 2};
}
if (1/x == 0) {
s = (x < 0)? 1 : 0;
return {s: s, m: Number.POSITIVE_INFINITY, e: Number.POSITIVE_INFINITY,
b: 2};
}
if (x == 0) {
s = (1/x < 0)? 1 : 0;
return {s: s, m: 0, e: Number.NEGATIVE_INFINITY, b: 2};
}
// compute the sign
if (x >= 0) {
s = 0, abs = x;
} else {
s = 1, abs = -x;
}
// calculate the approx exponent;
// then fix the exponent estimate by computing the significand
e = Math.floor( Math.log( abs ) / Math.LN2 );
m = abs / Math.pow( 2, e );
if (m >= 2) e += 1, m /= 2;
if (m < 1) e -= 1, m *= 2;
return {s: s, m: m, e: e, b:2};
};
--------------------------------------------------
From: "David Herman" <[email protected]>
Sent: Wednesday, March 21, 2012 7:20 AM
To: "Brendan Eich" <[email protected]>
Cc: "Roger Andrews" <[email protected]>; <[email protected]>
Subject: Re: splitting Number into s-m-e, radix too (cf. DFP/Decimal)
Technically you don't even need typed arrays to do it; it's just more work
to implement a "pure" library that extracts the bit strings. With typed
arrays it was utterly trivial (though you have to be slightly careful to
avoid writing unportable code.)
FWIW.
Dave
On Mar 21, 2012, at 12:00 AM, Brendan Eich wrote:
Not gonna change number (the primitive type) to IEEE 754r DFP (not sure
you were getting at that in closing). Just FTR.
These Number.prototype getters can be implemented today in top browsers
(thanks to typed arrays) and in ES6 (binary data embraces and extends
typed arrays). See https://github.com/dherman/float.js/.
/be
Roger Andrews wrote:
Floating-point numbers are formed of a sign (s), significand (m),
exponent (e), and radix (b):
(-1)^s * m * b^e
where 0<=m<b.
Often we want to access the s-m-e values directly, especially the
significand. Notably when doing comparison for approximate equality by
"masking out" the rounding error in the low order bits; or some
multiprecise work. In ES5 this is painful.
The sign, significand, exponent, radix are intrinsic properties of a
Number (like the length of a String) - so how about exposing them as
properties of Number? Say the sign, significand, and exponent could be
read-write and the radix read-only.
Advantages:
1) extracting the significand is easy:
x.signif
2) scaling is easy (scaleB operation):
x.exponent += N
3) the logB operation is easy:
x.exponent
Also programmers could distinguish a binary value from a decimal without
using typeof, using the 'radix' property instead. This might
future-proof against the possible coming of a Decimal type without
breaking existing code. Does it help there?
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss