Re: Comparing floating point values in Java
- From: Patricia Shanahan <pats@xxxxxxx>
- Date: Sat, 30 Dec 2006 20:22:27 GMT
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));
}
}
Java does not permit reordering optimizations that could affect a
floating point result.
In strictfp mode, the exact, bit-by-bit, result is predictable from the
source code for any Java implementation.
Without strictfp, the implementation is allowed, but never required, to
use a wider exponent for some intermediate results. That may suppress an
overflow to infinity or underflow to zero (for numbers too tiny to be
represented as denormalized with the correct exponent width).
That would allow some calculations to get different results depending on
issues such as whether a value was kept in a register or stored to a
memory temporary.
If you are just concerned about issues such as whether Java will
arbitrarily reorder expressions, you are fine in default mode. If you
really need exact equality on every identical source calculation, you
need strictfp.
Patricia
.
- References:
- Comparing floating point values in Java
- From: Philipp
- Comparing floating point values in Java
- Prev by Date: Re: Yet another generics question: Needs unchecked conversion to conform to ...
- Next by Date: Re: Speed of interfaces vs inheritance
- Previous by thread: Re: Comparing floating point values in Java
- Next by thread: Jakarta Struts tutorial.
- Index(es):
Relevant Pages
|
|