mfbt/double-conversion/bignum-dtoa.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/mfbt/double-conversion/bignum-dtoa.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,84 @@
     1.4 +// Copyright 2010 the V8 project authors. All rights reserved.
     1.5 +// Redistribution and use in source and binary forms, with or without
     1.6 +// modification, are permitted provided that the following conditions are
     1.7 +// met:
     1.8 +//
     1.9 +//     * Redistributions of source code must retain the above copyright
    1.10 +//       notice, this list of conditions and the following disclaimer.
    1.11 +//     * Redistributions in binary form must reproduce the above
    1.12 +//       copyright notice, this list of conditions and the following
    1.13 +//       disclaimer in the documentation and/or other materials provided
    1.14 +//       with the distribution.
    1.15 +//     * Neither the name of Google Inc. nor the names of its
    1.16 +//       contributors may be used to endorse or promote products derived
    1.17 +//       from this software without specific prior written permission.
    1.18 +//
    1.19 +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    1.20 +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    1.21 +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    1.22 +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    1.23 +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    1.24 +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    1.25 +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    1.26 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    1.27 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    1.28 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    1.29 +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    1.30 +
    1.31 +#ifndef DOUBLE_CONVERSION_BIGNUM_DTOA_H_
    1.32 +#define DOUBLE_CONVERSION_BIGNUM_DTOA_H_
    1.33 +
    1.34 +#include "utils.h"
    1.35 +
    1.36 +namespace double_conversion {
    1.37 +
    1.38 +enum BignumDtoaMode {
    1.39 +  // Return the shortest correct representation.
    1.40 +  // For example the output of 0.299999999999999988897 is (the less accurate but
    1.41 +  // correct) 0.3.
    1.42 +  BIGNUM_DTOA_SHORTEST,
    1.43 +  // Same as BIGNUM_DTOA_SHORTEST but for single-precision floats.
    1.44 +  BIGNUM_DTOA_SHORTEST_SINGLE,
    1.45 +  // Return a fixed number of digits after the decimal point.
    1.46 +  // For instance fixed(0.1, 4) becomes 0.1000
    1.47 +  // If the input number is big, the output will be big.
    1.48 +  BIGNUM_DTOA_FIXED,
    1.49 +  // Return a fixed number of digits, no matter what the exponent is.
    1.50 +  BIGNUM_DTOA_PRECISION
    1.51 +};
    1.52 +
    1.53 +// Converts the given double 'v' to ascii.
    1.54 +// The result should be interpreted as buffer * 10^(point-length).
    1.55 +// The buffer will be null-terminated.
    1.56 +//
    1.57 +// The input v must be > 0 and different from NaN, and Infinity.
    1.58 +//
    1.59 +// The output depends on the given mode:
    1.60 +//  - SHORTEST: produce the least amount of digits for which the internal
    1.61 +//   identity requirement is still satisfied. If the digits are printed
    1.62 +//   (together with the correct exponent) then reading this number will give
    1.63 +//   'v' again. The buffer will choose the representation that is closest to
    1.64 +//   'v'. If there are two at the same distance, than the number is round up.
    1.65 +//   In this mode the 'requested_digits' parameter is ignored.
    1.66 +//  - FIXED: produces digits necessary to print a given number with
    1.67 +//   'requested_digits' digits after the decimal point. The produced digits
    1.68 +//   might be too short in which case the caller has to fill the gaps with '0's.
    1.69 +//   Example: toFixed(0.001, 5) is allowed to return buffer="1", point=-2.
    1.70 +//   Halfway cases are rounded up. The call toFixed(0.15, 2) thus returns
    1.71 +//     buffer="2", point=0.
    1.72 +//   Note: the length of the returned buffer has no meaning wrt the significance
    1.73 +//   of its digits. That is, just because it contains '0's does not mean that
    1.74 +//   any other digit would not satisfy the internal identity requirement.
    1.75 +//  - PRECISION: produces 'requested_digits' where the first digit is not '0'.
    1.76 +//   Even though the length of produced digits usually equals
    1.77 +//   'requested_digits', the function is allowed to return fewer digits, in
    1.78 +//   which case the caller has to fill the missing digits with '0's.
    1.79 +//   Halfway cases are again rounded up.
    1.80 +// 'BignumDtoa' expects the given buffer to be big enough to hold all digits
    1.81 +// and a terminating null-character.
    1.82 +void BignumDtoa(double v, BignumDtoaMode mode, int requested_digits,
    1.83 +                Vector<char> buffer, int* length, int* point);
    1.84 +
    1.85 +}  // namespace double_conversion
    1.86 +
    1.87 +#endif  // DOUBLE_CONVERSION_BIGNUM_DTOA_H_

mercurial