Index: src/runtime.cc |
=================================================================== |
--- src/runtime.cc (revision 4155) |
+++ src/runtime.cc (working copy) |
@@ -5325,21 +5325,12 @@ |
NoHandleAllocation ha; |
ASSERT(args.length() == 1); |
Counters::math_round.Increment(); |
- CONVERT_DOUBLE_CHECKED(x, args[0]); |
- if (x > 0 && x < Smi::kMaxValue) { |
- return Smi::FromInt(static_cast<int>(x + 0.5)); |
- } |
- |
+ CONVERT_DOUBLE_CHECKED(x, args[0]); |
if (signbit(x) && x >= -0.5) return Heap::minus_zero_value(); |
- |
- // if the magnitude is big enough, there's no place for fraction part. If we |
- // try to add 0.5 to this number, 1.0 will be added instead. |
- if (x >= 9007199254740991.0 || x <= -9007199254740991.0) { |
- return args[0]; |
- } |
- |
- return Heap::NumberFromDouble(floor(x + 0.5)); |
+ double integer = ceil(x); |
+ if (integer - x > 0.5) { integer -= 1.0; } |
+ return Heap::NumberFromDouble(integer); |
} |