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.

Statistics
| Branch: | Revision:

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_