Re: Comparing floating point values in Java
- From: "Daniel Pitts" <googlegroupie@xxxxxxxxxxxxx>
- Date: 30 Dec 2006 10:33:25 -0800
Philipp wrote:
Hello,
I'm aware of problems (rounding, NaN etc) when comparing floating point
values in computers.
In C++ this goes a bit further as you cannot compare with certitude
floating point numbers even if you have made exactly the same operations
on each of them (see eg:
http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.18 )
My question: In Java, will unchanged values compare strictly true if equal?
Is it _guaranteed_ that the following code does output "true" on all JVMs?
Thanks for answers. Phil
example code:
public class Test {
public static void main(String[] args) {
float a = 1;
float b = 1;
System.out.println("a == b?: " + (a == b));
}
}
Look into StrictMath.
It might also be worthwhile to learn how to calculate error, and
compare signifigant figures only. If you only need a "probably equal",
then you can use a delta, eg:
public class FloatEquality {
public static boolean areEqual(float a, float b, float delta) {
return Math.abs(a - b) < delta;
}
public static float DELTA_F = 0.00000001f;
public static void main(String[] args) {
float a = 1f;
float b = 1f;
System.out.println("a == b?: " + areEqual(a, b, DELTA_F);
}
}
Hope this helps.
Daniel.
.
- References:
- Comparing floating point values in Java
- From: Philipp
- Comparing floating point values in Java
- Prev by Date: Jakarta Struts tutorial.
- Next by Date: hibernate annotations I get a MappingNotFoundException
- Previous by thread: Re: Comparing floating point values in Java
- Next by thread: Re: Comparing floating point values in Java
- Index(es):
Relevant Pages
|
|