Golfing Newton's Method I have the following code which I've written to emulate Newton's method for deriving the square root of a number: 

r=(x,y)=&gt;
  (z=((y=y||x)*y-x)/(2*y)&gt;1e-15)?
r(x,y-(y*y-x)/(2*y)):y


Where r(37) would result in 6.08276253029822 which is great given the limitations of my browser. 

I'd like to golf this code further seeing there's some repetition here, not to mention, I'd also like to reduce my error limit (the 1e-15). This is the furthest I've gotten. Can anyone help? If possible I'd love to eliminate the need of the error limit without resulting in a "maximum stack call size exceeded" error...

This is for a blog post I'm working on JavaScript and alternatives to native methods. I'll give a special shout out on the blog post to the persons who can help me out.

Thanks in advance.
Golfed only, -23 bytes
ES6 supports default parameters.

Default function parameters allow formal parameters to be initialized
with default values if no value or undefined is passed.

So, we can replace y=y||x with just r=&gt;(x,y=x).
(y*y-x)/(2*y) can be rewritten as y/2-x/2/y. And since this expression appears twice in the code, we can assign it to a new variable z.
We get:
r=(x,y=x)=&gt;(z=y/2-x/2/y)&gt;1e-15?r(x,y-z):y

As suggested by ETHproductions in the comments, we now can save 2 more bytes by multiplying z by 2:
r=(x,y=x)=&gt;(z=y-x/y)&gt;2e-15?r(x,y-z/2):y



r=(x,y=x)=&gt;(z=y-x/y)&gt;2e-15?r(x,y-z/2):y

console.log(r(37))




Alternate version, -26 bytes
To save more bytes, another approach is to just iterate enough times rather than using a test on the result.
That could be done that way:
r=(x,y=k=x)=&gt;(k/=2)?r(x,y/2+x/2/y):y



r=(x,y=k=x)=&gt;(k/=2)?r(x,y/2+x/2/y):y

console.log(r(37))



We start with k = x and divide it by 2 at each iteration. No matter the initial value of x, we will eventually reach 0 because of arithmetic underflow.
The good thing about this method is that the number of iterations doesn't heavily rely on the value of x. For instance, we'll get 1142 iterations for x = 1020 and 1009 iterations for x = 10 -20. In both cases, we iterate far too many times than necessary, without exceeding the default maximum number of iterations of common browsers.
Some more notes:

The error is negligible for x &gt; 10 -215 and quickly grows below this bound.
For the same byte count and less iterations, we can divide by 9 instead. In that case, a safe bound is x &gt; 10 -124.
Unlike Math.sqrt(), this method does not return NaN for negative numbers or ±Infinity (and neither does the original code).