Re: Comparing floating point values in Java



Arne Vajhøj wrote:
Philipp wrote:
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?

example code:
public class Test {
public static void main(String[] args) {
float a = 1;
float b = 1;
System.out.println("a == b?: " + (a == b));
}
}

Your example is not equivalent to the example in your link.

Yes I'm aware of that. The point in the link is that compiler optimization can lead to unequal floats even if exactly the same operations were performed on it. Is this also true for Java?

But in general you should not use == to compare floating
points in Java either.

Agree

Your example are just more simple than real life code.

No! (If I ask the question it's because I met this problem)

I was calculating an array of float values from some user input. But sometimes (rarely) the calculation cannot be done (this is correct behavior).
I then want to mark these values by setting them to -1 and treat this special case later on. So I later need to test for -1 in my array.

Philipp
.



Relevant Pages

  • java performance on machines
    ... Primarily the goal is to compare cpu/memory power on different operations, ... The idea is to write a series of tests in java, both integer and float based, which I then run on the machines to compare their performance. ... I was thinking of writing tests based on float operations and on integer operations. ...
    (comp.lang.java.help)
  • Re: java performance on machines
    ... Primarily the goal is to compare cpu/memory power on different ... The idea is to write a series of tests in java, both integer and float ... If synthetic benchmarks are ok then you could look at the SPEC benchmarks ...
    (comp.lang.java.help)
  • Re: Understand some code
    ... Looks like badly written code, replace with 'float* x' and the code would ... > look like some for off array not 100% sure. ... java you don't have this problem so I would drop the x and just return y. ...
    (comp.lang.cpp)
  • Re: comparison on non-integer types
    ... with float or double you tend to get only approximate results. ... mathematically but which do not compare the same. ... if you're writing a qsort compar function for an array of floats. ...
    (comp.lang.c)
  • Re: Comparing floating point values in Java
    ... In Java, will unchanged values compare strictly true if equal? ... float a = 1; ... Java uses IEEE floating point. ...
    (comp.lang.java.programmer)