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:
• Tim Cooke
• Campbell Ritchie
• Jeanne Boyarsky
• Ron McLeod
• Liutauras Vilda
Sheriffs:
• Rob Spoor
• Junilu Lacar
• paul wheaton
Saloon Keepers:
• Stephan van Hulst
• Tim Moores
• Tim Holloway
• Carey Brown
• Scott Selikoff
Bartenders:
• Piet Souris
• Jj Roberts
• fred rosenberger

# floating point anomaly?

Ranch Hand
Posts: 55
• Number of slices to send:
Optional 'thank-you' note:
Will this return true or false??
System.out.println(1.0 - 2.0/3.0 == 1.0/3.0);

mathematically its true but if you try working it out you'll get false.Can anyone give the reason behind it??
regs Rajesh

Rancher
Posts: 43028
76
• Number of slices to send:
Optional 'thank-you' note:
Go back to the classics: What every computer scientist should know about floating-point arithmetic

Ranch Hand
Posts: 1780
• Number of slices to send:
Optional 'thank-you' note:
mathematics != floating point arithmetic

Rajesh Chandra
Ranch Hand
Posts: 55
• Number of slices to send:
Optional 'thank-you' note:
Thanks to Ulf & Jeff .The link that was posted is too volumous.Do you know of any place wherin I can get the basics explained in a simple way.Anyway is there a way by which we can ascertain that the aritmetic will be different as in the above case?
Regs
Rajesh

Sheriff
Posts: 22656
126
• Number of slices to send:
Optional 'thank-you' note:
In floating point arithmetic, most decimals are rounded - simply because it is impossible to define it in binary. Where arithmetic has problems with 1/3, floating point arithmetic has problems with many other numbers as well, like 1/10. In binary, this leads to a repetition similar to 1/3 or 1/9.

Therefore, in any programming language, floating point comparison should be one by checking if the difference is small enough:
Where EPSILON is a very small value - the smaller EPSILON is, the smaller the fault in comparison.
Ideally EPSILON would of course be 0.0, meaning f1 == f2, but as you've just read - you can't rely on that comparison.

Greenhorn
Posts: 26
• Number of slices to send:
Optional 'thank-you' note:
This is one of the more obscure things for a beginner to grasp and it seems like the Question is Asked Frequently....

Ulf Dittmer
Rancher
Posts: 43028
76
• Number of slices to send:
Optional 'thank-you' note:
It sure is a FAQ. I've added an entry to the Java Beginners FAQ.

Eric McIntyre
Greenhorn
Posts: 26
• Number of slices to send:
Optional 'thank-you' note:
You know, I didn't mean to seem lazy. I just now realized the FAQ section is a Wiki.

Greenhorn
Posts: 5
• Number of slices to send:
Optional 'thank-you' note: