The data contained in this repository can be downloaded to your computer using one of several clients.
Please see the documentation of your version control software client for more information.
Please select the desired protocol below to get the URL.
This URL has Read-Only access.
main_repo / deps / v8 / src / fast-dtoa.h @ 3a280b20
History | View | Annotate | Download (2.33 KB)
1 |
// Copyright 2011 the V8 project authors. All rights reserved.
|
---|---|
2 |
// Use of this source code is governed by a BSD-style license that can be
|
3 |
// found in the LICENSE file.
|
4 |
|
5 |
#ifndef V8_FAST_DTOA_H_
|
6 |
#define V8_FAST_DTOA_H_
|
7 |
|
8 |
namespace v8 { |
9 |
namespace internal { |
10 |
|
11 |
enum FastDtoaMode {
|
12 |
// Computes the shortest representation of the given input. The returned
|
13 |
// result will be the most accurate number of this length. Longer
|
14 |
// representations might be more accurate.
|
15 |
FAST_DTOA_SHORTEST, |
16 |
// Computes a representation where the precision (number of digits) is
|
17 |
// given as input. The precision is independent of the decimal point.
|
18 |
FAST_DTOA_PRECISION |
19 |
}; |
20 |
|
21 |
// FastDtoa will produce at most kFastDtoaMaximalLength digits. This does not
|
22 |
// include the terminating '\0' character.
|
23 |
const int kFastDtoaMaximalLength = 17; |
24 |
|
25 |
// Provides a decimal representation of v.
|
26 |
// The result should be interpreted as buffer * 10^(point - length).
|
27 |
//
|
28 |
// Precondition:
|
29 |
// * v must be a strictly positive finite double.
|
30 |
//
|
31 |
// Returns true if it succeeds, otherwise the result can not be trusted.
|
32 |
// There will be *length digits inside the buffer followed by a null terminator.
|
33 |
// If the function returns true and mode equals
|
34 |
// - FAST_DTOA_SHORTEST, then
|
35 |
// the parameter requested_digits is ignored.
|
36 |
// The result satisfies
|
37 |
// v == (double) (buffer * 10^(point - length)).
|
38 |
// The digits in the buffer are the shortest representation possible. E.g.
|
39 |
// if 0.099999999999 and 0.1 represent the same double then "1" is returned
|
40 |
// with point = 0.
|
41 |
// The last digit will be closest to the actual v. That is, even if several
|
42 |
// digits might correctly yield 'v' when read again, the buffer will contain
|
43 |
// the one closest to v.
|
44 |
// - FAST_DTOA_PRECISION, then
|
45 |
// the buffer contains requested_digits digits.
|
46 |
// the difference v - (buffer * 10^(point-length)) is closest to zero for
|
47 |
// all possible representations of requested_digits digits.
|
48 |
// If there are two values that are equally close, then FastDtoa returns
|
49 |
// false.
|
50 |
// For both modes the buffer must be large enough to hold the result.
|
51 |
bool FastDtoa(double d, |
52 |
FastDtoaMode mode, |
53 |
int requested_digits,
|
54 |
Vector<char> buffer,
|
55 |
int* length,
|
56 |
int* decimal_point);
|
57 |
|
58 |
} } // namespace v8::internal
|
59 |
|
60 |
#endif // V8_FAST_DTOA_H_ |