wood burning stoves 2.0*
The moose likes Beginning Java and the fly likes Resolve the square root with the babilonian method Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCA/OCP Java SE 7 Programmer I & II Study Guide this week in the OCPJP forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Resolve the square root with the babilonian method" Watch "Resolve the square root with the babilonian method" New topic
Author

Resolve the square root with the babilonian method

Paolo Lemos
Greenhorn

Joined: Aug 19, 2011
Posts: 5
Hi all, im implementing the babylonian method to get the square root of a number as you can see here (in spanish) (wikipedia) .

Mi first code is:


And it works , but then i try with doubles:

And it loops for ever for numbers like "8".

I want to know why is this, and the same happens in C++ with doubles.

Thanks.
Emanuel Kadziela
Ranch Hand

Joined: Mar 24, 2005
Posts: 186
I'm not sure if this is correct, but it sounds like a rounding issue with doubles. Try to replace the exact "equals" comparison with something more tolerant, like:

Winston Gutkowski
Bartender

Joined: Mar 17, 2011
Posts: 8052
    
  22

Paolo Lemos wrote:I want to know why is this, and the same happens in C++ with doubles.

Simply put: because doubles are NOT exact, so it's quite possible that your divisions never end up equal.

And why would you think that 8 would be special? √8 is irrational from what I recall (it has been a long time though). √9 on the other hand...

I suspect that it works for float because calculations are actually done with doubles and then converted; but I wouldn't stake my life on it.

For more information, read this.

Winston

Isn't it funny how there's always time and money enough to do it WRONG?
Articles by Winston can be found here
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 39478
    
  28
I think it is just lucky (or unlucky) that √8 “hunts”. That means that it works out √8.000000000001 followed by √7.999999999999999 repeatedly or similar. It says in the Java™ Language Specification that floating‑point arithmetic is done on 32 bits by default, so it can’t be that a float is converted to a double.
Paolo Lemos
Greenhorn

Joined: Aug 19, 2011
Posts: 5
Its work fine with:



Now i have:


And the output is:

2.828427
2.82842712474619
2.82842712474619


The new interesting thing is the sqrt3 method, i dont understand how the expression


transforms into :


In this last form, the condition works fine.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Resolve the square root with the babilonian method