Chromium Code Reviews| Index: runtime/lib/double.dart |
| =================================================================== |
| --- runtime/lib/double.dart (revision 1148) |
| +++ runtime/lib/double.dart (working copy) |
| @@ -103,6 +103,8 @@ |
| bool isNaN() native "Double_isNaN"; |
| double abs() { |
| + // Handle negative 0.0. |
| + if (this == 0.0) return 0.0; |
| return this < 0.0 ? -this : this; |
| } |
| @@ -139,7 +141,7 @@ |
| String s = ""; |
| // Step 6. |
| - if (x.isNegative()) { |
| + if (x.isNegative() && x != 0.0) { |
| s = "-"; |
| x = -x; |
| } |
| @@ -192,9 +194,29 @@ |
| String toRadixString(int radix) { |
| throw "Double.toRadixString unimplemented."; |
| } |
| + |
| + // Order is: NaN > Infinity > ... > 0.0 > -0.0 > ... > -Infinity. |
| int compareTo(Comparable other) { |
| - if (this == other) return 0; |
| - if (this < other) return -1; |
| - return 1; |
| + final int EQUAL = 0, LESS = -1, GREATER = 1; |
| + if (this < other) { |
| + return LESS; |
| + } else if (this > other) { |
| + return GREATER; |
| + } else if (this == other) { |
| + if (this == 0.0) { |
| + bool thisIsNegative = isNegative(); |
| + bool otherIsNegative = other.isNegative(); |
| + if (thisIsNegative == otherIsNegative) { |
| + return EQUAL; |
| + } |
| + return thisIsNegative ? LESS : GREATER; |
| + } else { |
| + return EQUAL; |
| + } |
| + } else if (isNaN()) { |
| + return other.isNaN() ? EQUAL : GREATER; |
| + } else { |
| + return LESS; |
|
hausner
2011/11/03 17:20:40
How do we get here? Which case is this? Seems like
srdjan
2011/11/03 17:50:39
When other is NaN. Added comment.
|
| + } |
| } |
| } |