aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2001-10-20 06:26:45 +0000
committerMark Wielaard <mark@gcc.gnu.org>2001-10-20 06:26:45 +0000
commitf0fdd66ba4fa07d5ef314eab9aee404750ae3ef4 (patch)
treea4ea1a7426a312774f365dbcd1470afc8f6da6ed /libjava
parentafb649d5c9f791f9e506053aa897804e3c53adab (diff)
downloadgcc-f0fdd66ba4fa07d5ef314eab9aee404750ae3ef4.zip
gcc-f0fdd66ba4fa07d5ef314eab9aee404750ae3ef4.tar.gz
gcc-f0fdd66ba4fa07d5ef314eab9aee404750ae3ef4.tar.bz2
Double.java: More Classpath merging
* java/lang/Double.java: More Classpath merging (isInfinite): Don't use doubleToLongBits (isNaN (Object)): return v != v (initIDs): make native * java/lang/Float.java: Ditto (isInfinite): Don't use floatToIntBits (isNaN (Object)): return v != v * java/lang/natDouble.cc: add empty initIDs() From-SVN: r46370
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog11
-rw-r--r--libjava/java/lang/Double.java23
-rw-r--r--libjava/java/lang/Float.java21
-rw-r--r--libjava/java/lang/natDouble.cc6
4 files changed, 42 insertions, 19 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 2554add..3e8675f 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,5 +1,16 @@
2001-10-19 Mark Wielaard <mark@klomp.org>
+ * java/lang/Double.java: More Classpath merging
+ (isInfinite): Don't use doubleToLongBits
+ (isNaN (Object)): return v != v
+ (initIDs): make native
+ * java/lang/Float.java: Ditto
+ (isInfinite): Don't use floatToIntBits
+ (isNaN (Object)): return v != v
+ * java/lang/natDouble.cc: add empty initIDs()
+
+2001-10-19 Mark Wielaard <mark@klomp.org>
+
* javax/naming/BinaryRefAddr.java: New file
* javax/naming/InitialContext.java: Compile fix
* javax/naming/InvalidNameException.java: Add comments
diff --git a/libjava/java/lang/Double.java b/libjava/java/lang/Double.java
index caaa406..63ee265 100644
--- a/libjava/java/lang/Double.java
+++ b/libjava/java/lang/Double.java
@@ -146,6 +146,14 @@ public final class Double extends Number implements Comparable
* <code>instanceof</code> <code>Double</code>, and represents
* the same primitive <code>double</code> value return
* <code>true</code>. Otherwise <code>false</code> is returned.
+ * <p>
+ * Note that there are two differences between <code>==</code> and
+ * <code>equals()</code>. <code>0.0d == -0.0d</code> returns <code>true</code>
+ * but <code>new Double(0.0d).equals(new Double(-0.0d))</code> returns
+ * <code>false</code>. And <code>Double.NaN == Double.NaN</code> returns
+ * <code>false</code>, but
+ * <code>new Double(Double.NaN).equals(new Double(Double.NaN))</code> returns
+ * <code>true</code>.
*
* @param obj the object to compare to
* @return whether the objects are semantically equal.
@@ -248,11 +256,9 @@ public final class Double extends Number implements Comparable
*/
public static boolean isNaN (double v)
{
- long bits = doubleToLongBits (v);
- long e = bits & 0x7ff0000000000000L;
- long f = bits & 0x000fffffffffffffL;
-
- return e == 0x7ff0000000000000L && f != 0L;
+ // This works since NaN != NaN is the only reflexive inequality
+ // comparison which returns true.
+ return v != v;
}
/**
@@ -277,10 +283,7 @@ public final class Double extends Number implements Comparable
*/
public static boolean isInfinite (double v)
{
- long bits = doubleToLongBits (v);
- long f = bits & 0x7fffffffffffffffL;
-
- return f == 0x7ff0000000000000L;
+ return (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY);
}
/**
@@ -508,5 +511,5 @@ public final class Double extends Number implements Comparable
* Initialize JNI cache. This method is called only by the
* static initializer when using JNI.
*/
- private static void initIDs () { /* Not used in libgcj */ };
+ private static native void initIDs ();
}
diff --git a/libjava/java/lang/Float.java b/libjava/java/lang/Float.java
index 91da075..9e26143 100644
--- a/libjava/java/lang/Float.java
+++ b/libjava/java/lang/Float.java
@@ -215,6 +215,14 @@ public final class Float extends Number implements Comparable
* <code>instanceof</code> <code>Float</code>, and represents
* the same primitive <code>float</code> value return
* <code>true</code>. Otherwise <code>false</code> is returned.
+ * <p>
+ * Note that there are two differences between <code>==</code> and
+ * <code>equals()</code>. <code>0.0f == -0.0f</code> returns <code>true</code>
+ * but <code>new Float(0.0f).equals(new Float(-0.0f))</code> returns
+ * <code>false</code>. And <code>Float.NaN == Float.NaN</code> returns
+ * <code>false</code>, but
+ * <code>new Float(Float.NaN).equals(new Float(Float.NaN))</code> returns
+ * <code>true</code>.
*
* @param obj the object to compare to
* @return whether the objects are semantically equal.
@@ -364,11 +372,9 @@ public final class Float extends Number implements Comparable
*/
public static boolean isNaN (float v)
{
- int bits = floatToIntBits (v);
- int e = bits & 0x7f800000;
- int f = bits & 0x007fffff;
-
- return e == 0x7f800000 && f != 0;
+ // This works since NaN != NaN is the only reflexive inequality
+ // comparison which returns true.
+ return v != v;
}
/**
@@ -393,10 +399,7 @@ public final class Float extends Number implements Comparable
*/
public static boolean isInfinite (float v)
{
- int bits = floatToIntBits (v);
- int f = bits & 0x7fffffff;
-
- return f == 0x7f800000;
+ return (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY);
}
/**
diff --git a/libjava/java/lang/natDouble.cc b/libjava/java/lang/natDouble.cc
index 7e8e0b7..b0b24a7 100644
--- a/libjava/java/lang/natDouble.cc
+++ b/libjava/java/lang/natDouble.cc
@@ -186,3 +186,9 @@ java::lang::Double::parseDouble(jstring str)
}
throw new NumberFormatException;
}
+
+void
+java::lang::Double::initIDs()
+{
+ // Not used in libgcj
+}