Win a copy of Functional Reactive Programming this week in the Other Languages forum!

# Resolve the square root with the babilonian method

Paolo Lemos
Greenhorn
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.

Ranch Hand
Posts: 187
• 1
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
Posts: 10527
64
• 1
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.

Winston

Campbell Ritchie
Sheriff
Posts: 50217
79
• 1
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
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.