sqrt interpreter Q

Andrew Haley aph@cambridge.redhat.com
Fri Feb 8 06:07:00 GMT 2002


Tom Tromey writes:
 > >>>>> "Andreas" == Andreas Tobler <toa@pop.agri.ch> writes:
 > 
 > Andreas> Doing it with gij I get the following:
 > Andreas> [titanium:~] andreast% gij my_sqrt
 > Andreas> sqrt_int: -2147483648
 > Andreas> sqrt_double: NaN
 > Andreas> sqrt_long: -9223372034707292160
 > 
 > I looked at this a bit.
 > On x86 the appended program prints the `int' value.
 > So I think the C++ compiler translates `(int) NaN' differently from
 > the Java compiler.
Yeah, I wrote special code in the Java compiler to do the Right Thing.
It's:
/* Convert an IEEE real to an integer type. The result of such a
 conversion when the source operand is a NaN isn't defined by
 IEEE754, but by the Java language standard: it must be zero. Also,
 overflows must be clipped to within range. This conversion
 produces something like:
 ((expr >= (float)MAX_INT)
 ? MAX_INT 
 : ((expr <= (float)MIN_INT)
	 ? MIN_INT
	 : ((expr != expr)
	 ? 0 
	 : (int)expr))) */
in java/typeck.c.
Andrew.


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /