File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
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
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: 7711
    
  20

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: 38497
    
  23
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.
 
Consider Paul's rocket mass heater.
 
subject: Resolve the square root with the babilonian method