Index: src/fast-dtoa.h |
=================================================================== |
--- src/fast-dtoa.h (revision 4612) |
+++ src/fast-dtoa.h (working copy) |
@@ -31,27 +31,52 @@ |
namespace v8 { |
namespace internal { |
+enum FastDtoaMode { |
+ // Computes the shortest representation of the given input. The returned |
+ // result will be the most accurate number of this length. Longer |
+ // representations might be more accurate. |
+ FAST_DTOA_SHORTEST, |
+ // Computes a representation where the precision (number of digits) is |
+ // given as input. The precision is independent of the decimal point. |
+ FAST_DTOA_PRECISION |
+}; |
+ |
// FastDtoa will produce at most kFastDtoaMaximalLength digits. This does not |
// include the terminating '\0' character. |
static const int kFastDtoaMaximalLength = 17; |
// Provides a decimal representation of v. |
-// v must be a strictly positive finite double. |
+// The result should be interpreted as buffer * 10^(point - length). |
+// |
+// Precondition: |
+// * v must be a strictly positive finite double. |
+// |
// Returns true if it succeeds, otherwise the result can not be trusted. |
// There will be *length digits inside the buffer followed by a null terminator. |
-// If the function returns true then |
-// v == (double) (buffer * 10^(point - length)). |
-// The digits in the buffer are the shortest representation possible: no |
-// 0.099999999999 instead of 0.1. |
-// The last digit will be closest to the actual v. That is, even if several |
-// digits might correctly yield 'v' when read again, the buffer will contain the |
-// one closest to v. |
-// The variable 'sign' will be '0' if the given number is positive, and '1' |
-// otherwise. |
+// If the function returns true and mode equals |
+// - FAST_DTOA_SHORTEST, then |
+// the parameter requested_digits is ignored. |
+// The result satisfies |
+// v == (double) (buffer * 10^(point - length)). |
+// The digits in the buffer are the shortest representation possible. E.g. |
+// if 0.099999999999 and 0.1 represent the same double then "1" is returned |
+// with point = 0. |
+// The last digit will be closest to the actual v. That is, even if several |
+// digits might correctly yield 'v' when read again, the buffer will contain |
+// the one closest to v. |
+// - FAST_DTOA_PRECISION, then |
+// the buffer contains requested_digits digits. |
+// the difference v - (buffer * 10^(point-length)) is closest to zero for |
+// all possible representations of requested_digits digits. |
+// If there are two values that are equally close, then FastDtoa returns |
+// false. |
+// For both modes the buffer must be large enough to hold the result. |
bool FastDtoa(double d, |
+ FastDtoaMode mode, |
+ int requested_digits, |
Vector<char> buffer, |
int* length, |
- int* point); |
+ int* decimal_point); |
} } // namespace v8::internal |