programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Campbell Ritchie
• Tim Cooke
• Devaka Cooray
• Ron McLeod
• Jeanne Boyarsky
Sheriffs:
• Liutauras Vilda
• paul wheaton
• Junilu Lacar
Saloon Keepers:
• Tim Moores
• Stephan van Hulst
• Piet Souris
• Carey Brown
• Tim Holloway
Bartenders:
• Martijn Verburg
• Frits Walraven
• Himai Minh

# Resolve the square root with the babilonian method

Greenhorn
Posts: 5
• Number of slices to send:
Optional 'thank-you' note:
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
• Number of slices to send:
Optional 'thank-you' note:
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:

Bartender
Posts: 10780
71
• 1
• Number of slices to send:
Optional 'thank-you' note:

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

Marshal
Posts: 76852
366
• 1
• Number of slices to send:
Optional 'thank-you' note:
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
• Number of slices to send:
Optional 'thank-you' note:
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.

 Too many men are afraid of being fools - Henry Ford. Foolish tiny ad: the value of filler advertising in 2021 https://coderanch.com/t/730886/filler-advertising