how about more args for Math.hypot
Roger Andrews
roger.andrews at mail104.co.uk
Thu Mar 15 06:45:06 PDT 2012
> 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));
};
More information about the es-discuss
mailing list