Replying to the four proposals you sent in one mail for easier discussion:

OK.  I've replied to your replies in this thread as 4 short posts.

*** Math.cbrt ***
This was considered, but wasn't above the line of what was in the proposed
Math extensions.  What use case do you have in mind?

I don't have specific use cases, but observe that cbrt is very useful in
maths - comparable with sqrt.  Cubic equations seem to be nearly as frequent
as quadratic (and can be solved by Cardano's Method like the famous
quadratic solution).

Comparing against Math.pow:
1) cbrt is more explicit about -0 and -Infinity, whereas pow deals with the
general case.  (Note that sqrt is also explicit about -0.)
2) cbrt correctly handles a negative domain (x<0) with no nasty drama,
whereas pow returns NaN - forcing the user to check and correct before
invoking.
3) Obviously, cbrt is more accurate than pow since 1/3 is not exact in
floating-point, and the error compounds internally.

I offer the following implementation of Math.cbrt ...

Math.cbrt = function (x)
{
 x = +x;

 // handle NaN, infinities, zeroes -- thus avoid Inf/Inf and 0/0

 if (isNaN( x/x ))  return x;

 // estimate the cube root well;
 // then improve by Halley's Method (more accurate ULP than Newton's!)

 var r = Math.pow( Math.abs(x), 1/3 );
 var t = x/r/r; // safe!
 return r + (r * (t-r) / (2*r + t));
};


_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to