19    significand = significand << 1;
 
   20    exponent = exponent - 1;
 
 
   31                                     bool need_boundary_deltas,
 
   32                                     Bignum* numerator, Bignum* denominator,
 
   33                                     Bignum* delta_minus, Bignum* delta_plus);
 
   40                            int* decimal_point, Bignum* numerator,
 
   41                            Bignum* denominator, Bignum* delta_minus,
 
   46                                   Bignum* delta_minus, Bignum* delta_plus,
 
   47                                   bool is_even, Vector<char> buffer,
 
   50static void BignumToFixed(
int requested_digits, 
int* decimal_point,
 
   51                          Bignum* numerator, Bignum* denominator,
 
   52                          Vector<char>(buffer), 
int* length);
 
   58                                  Bignum* numerator, Bignum* denominator,
 
   59                                  Vector<char>(buffer), 
int* length);
 
   66  bool is_even = (significand & 1) == 0;
 
   82    *decimal_point = -requested_digits;
 
   97                           &denominator, &delta_minus, &delta_plus);
 
  100                  &denominator, &delta_minus, &delta_plus);
 
  106                             &delta_plus, is_even, buffer, length);
 
  109      BignumToFixed(requested_digits, decimal_point, &numerator, &denominator,
 
  114                            &denominator, buffer, length);
 
 
  142    delta_plus = delta_minus;
 
  151    buffer[(*length)++] = digit + 
'0';
 
  158    bool in_delta_room_minus;
 
  159    bool in_delta_room_plus;
 
  163      in_delta_room_minus = 
Bignum::Less(*numerator, *delta_minus);
 
  172    if (!in_delta_room_minus && !in_delta_room_plus) {
 
  179      if (delta_minus != delta_plus) {
 
  182    } 
else if (in_delta_room_minus && in_delta_room_plus) {
 
  195        buffer[(*length) - 1]++;
 
  202        if ((buffer[(*length) - 1] - 
'0') % 2 == 0) {
 
  206          buffer[(*length) - 1]++;
 
  210    } 
else if (in_delta_room_minus) {
 
  220      buffer[(*length) - 1]++;
 
 
  236  for (
int i = 0; 
i < count - 1; ++
i) {
 
  242    buffer[
i] = digit + 
'0';
 
  252  buffer[count - 1] = digit + 
'0';
 
  255  for (
int i = count - 1; 
i > 0; --
i) {
 
  256    if (buffer[
i] != 
'0' + 10) 
break;
 
  260  if (buffer[0] == 
'0' + 10) {
 
 
  279  if (-(*decimal_point) > requested_digits) {
 
  285    *decimal_point = -requested_digits;
 
  288  } 
else if (-(*decimal_point) == requested_digits) {
 
  291    DCHECK(*decimal_point == -requested_digits);
 
  309    int needed_digits = (*decimal_point) + requested_digits;
 
 
  352  const double k1Log10 = 0.30102999566398114;  
 
  355  const int kSignificandSize = 53;
 
  357      std::ceil((exponent + kSignificandSize - 1) * k1Log10 - 1e-10);
 
  358  return static_cast<int>(estimate);
 
 
  363    double v, 
int estimated_power, 
bool need_boundary_deltas, 
Bignum* numerator,
 
  376  if (need_boundary_deltas) {
 
 
  407    double v, 
int estimated_power, 
bool need_boundary_deltas, 
Bignum* numerator,
 
  423  if (need_boundary_deltas) {
 
 
  455    double v, 
int estimated_power, 
bool need_boundary_deltas, 
Bignum* numerator,
 
  457  const uint64_t kMinimalNormalizedExponent = 0x0010'0000'0000'0000;
 
  464  Bignum* power_ten = numerator;
 
  467  if (need_boundary_deltas) {
 
  480  DCHECK(numerator == power_ten);
 
  487  if (need_boundary_deltas) {
 
 
  548                                     bool need_boundary_deltas,
 
  551  if (
Double(v).Exponent() >= 0) {
 
  553        v, estimated_power, need_boundary_deltas, numerator, denominator,
 
  554        delta_minus, delta_plus);
 
  555  } 
else if (estimated_power >= 0) {
 
  557        v, estimated_power, need_boundary_deltas, numerator, denominator,
 
  558        delta_minus, delta_plus);
 
  561        v, estimated_power, need_boundary_deltas, numerator, denominator,
 
  562        delta_minus, delta_plus);
 
 
  578                            int* decimal_point, 
Bignum* numerator,
 
  592    *decimal_point = estimated_power + 1;
 
  594    *decimal_point = estimated_power;
 
 
void AssignUInt16(uint16_t value)
static bool LessEqual(const Bignum &a, const Bignum &b)
uint16_t DivideModuloIntBignum(const Bignum &other)
void MultiplyByUInt64(uint64_t factor)
void AssignUInt64(uint64_t value)
static bool Equal(const Bignum &a, const Bignum &b)
static const int kMaxSignificantBits
void AssignBignum(const Bignum &other)
void ShiftLeft(int shift_amount)
static bool Less(const Bignum &a, const Bignum &b)
void AssignPowerUInt16(uint16_t base, int exponent)
static int PlusCompare(const Bignum &a, const Bignum &b, const Bignum &c)
constexpr uint64_t AsUint64() const
static constexpr uint64_t kSignificandMask
static constexpr uint64_t kExponentMask
static constexpr uint64_t kHiddenBit
constexpr int Exponent() const
constexpr uint64_t Significand() const
static void InitialScaledStartValuesPositiveExponent(double v, int estimated_power, bool need_boundary_deltas, Bignum *numerator, Bignum *denominator, Bignum *delta_minus, Bignum *delta_plus)
static void BignumToFixed(int requested_digits, int *decimal_point, Bignum *numerator, Bignum *denominator, Vector< char >(buffer), int *length)
static void GenerateShortestDigits(Bignum *numerator, Bignum *denominator, Bignum *delta_minus, Bignum *delta_plus, bool is_even, Vector< char > buffer, int *length)
void BignumDtoa(double v, BignumDtoaMode mode, int requested_digits, Vector< char > buffer, int *length, int *decimal_point)
static int NormalizedExponent(uint64_t significand, int exponent)
static int EstimatePower(int exponent)
static void GenerateCountedDigits(int count, int *decimal_point, Bignum *numerator, Bignum *denominator, Vector< char >(buffer), int *length)
static void InitialScaledStartValuesNegativeExponentNegativePower(double v, int estimated_power, bool need_boundary_deltas, Bignum *numerator, Bignum *denominator, Bignum *delta_minus, Bignum *delta_plus)
static void InitialScaledStartValues(double v, int estimated_power, bool need_boundary_deltas, Bignum *numerator, Bignum *denominator, Bignum *delta_minus, Bignum *delta_plus)
static void InitialScaledStartValuesNegativeExponentPositivePower(double v, int estimated_power, bool need_boundary_deltas, Bignum *numerator, Bignum *denominator, Bignum *delta_minus, Bignum *delta_plus)
static void FixupMultiply10(int estimated_power, bool is_even, int *decimal_point, Bignum *numerator, Bignum *denominator, Bignum *delta_minus, Bignum *delta_plus)
#define DCHECK_LE(v1, v2)
#define DCHECK_NE(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_GT(v1, v2)