Lines Matching refs:numerator
28 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
32 Bignum* numerator, Bignum* denominator,
34 // Multiplies numerator/denominator so that its values lies in the range 1-10.
36 // v = numerator'/denominator' * 10^(decimal_point-1)
37 // where numerator' and denominator' are the values of numerator and
40 int* decimal_point, Bignum* numerator,
45 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
51 Bignum* numerator, Bignum* denominator,
53 // Generates 'count' digits of numerator/denominator.
58 Bignum* numerator, Bignum* denominator,
86 Bignum numerator;
96 InitialScaledStartValues(v, estimated_power, need_boundary_deltas, &numerator,
98 // We now have v = (numerator / denominator) * 10^estimated_power.
99 FixupMultiply10(estimated_power, is_even, decimal_point, &numerator,
101 // We now have v = (numerator / denominator) * 10^(decimal_point-1), and
102 // 1 <= (numerator + delta_plus) / denominator < 10
105 GenerateShortestDigits(&numerator, &denominator, &delta_minus,
109 BignumToFixed(requested_digits, decimal_point, &numerator, &denominator,
113 GenerateCountedDigits(requested_digits, decimal_point, &numerator,
129 // m- := (numerator - delta_minus) / denominator
130 // m+ := (numerator + delta_plus) / denominator
132 // Precondition: 0 <= (numerator+delta_plus) / denominator < 10.
133 // If 1 <= (numerator+delta_plus) / denominator < 10 then no leading 0 digit
135 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
147 digit = numerator->DivideModuloIntBignum(*denominator);
149 // digit = numerator / denominator (integer division).
150 // numerator = numerator % denominator.
161 in_delta_room_minus = Bignum::LessEqual(*numerator, *delta_minus);
163 in_delta_room_minus = Bignum::Less(*numerator, *delta_minus);
167 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
170 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
174 numerator->Times10();
183 // Let's see if 2*numerator < denominator.
185 int compare = Bignum::PlusCompare(*numerator, *numerator, *denominator);
226 // Let v = numerator / denominator < 10.
233 Bignum* numerator, Bignum* denominator,
238 digit = numerator->DivideModuloIntBignum(*denominator);
240 // digit = numerator / denominator (integer division).
241 // numerator = numerator % denominator.
244 numerator->Times10();
248 digit = numerator->DivideModuloIntBignum(*denominator);
249 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
272 // Input verifies: 1 <= (numerator + delta) / denominator < 10.
274 Bignum* numerator, Bignum* denominator,
295 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
310 GenerateCountedDigits(needed_digits, decimal_point, numerator, denominator,
363 double v, int estimated_power, bool need_boundary_deltas, Bignum* numerator,
370 // numerator = v.
371 numerator->AssignUInt64(Double(v).Significand());
372 numerator->ShiftLeft(Double(v).Exponent());
380 numerator->ShiftLeft(1);
399 numerator->ShiftLeft(1); // *2
407 double v, int estimated_power, bool need_boundary_deltas, Bignum* numerator,
415 // numerator = significand
417 // numerator = v * / 2^-exponent
418 numerator->AssignUInt64(significand);
427 numerator->ShiftLeft(1);
447 numerator->ShiftLeft(1); // *2
455 double v, int estimated_power, bool need_boundary_deltas, Bignum* numerator,
461 // multiply all values (numerator and deltas) by 10^-estimated_power.
463 // Use numerator as temporary container for power_ten.
464 Bignum* power_ten = numerator;
468 // Since power_ten == numerator we must make a copy of 10^estimated_power
469 // before we complete the computation of the numerator.
475 // numerator = significand * 2 * 10^-estimated_power
477 // numerator = v * 10^-estimated_power * 2 * 2^-exponent.
478 // Remember: numerator has been abused as power_ten. So no need to assign it
480 DCHECK(numerator == power_ten);
481 numerator->MultiplyByUInt64(significand);
490 numerator->ShiftLeft(1);
504 numerator->ShiftLeft(1); // *2
512 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
521 // - a scaled numerator: s.t. numerator/denominator == v / 10^estimated_power.
531 // v / 10^ep = numerator / denominator.
541 // we then have 0.1 <= numerator/denominator < 1
542 // or 1 <= numerator/denominator < 10
549 Bignum* numerator, Bignum* denominator,
553 v, estimated_power, need_boundary_deltas, numerator, denominator,
557 v, estimated_power, need_boundary_deltas, numerator, denominator,
561 v, estimated_power, need_boundary_deltas, numerator, denominator,
566 // This routine multiplies numerator/denominator so that its values lies in the
568 // 1 <= (numerator + delta_plus) /denominator < 10.
569 // Let numerator the input before modification and numerator' the argument
571 // numerator / denominator * 10^estimated_power ==
572 // numerator' / denominator' * 10^(decimal_point - 1)
575 // estimated_power) but do not touch the numerator or denominator.
576 // Otherwise the routine multiplies the numerator and the deltas by 10.
578 int* decimal_point, Bignum* numerator,
585 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
587 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
590 // Since numerator + delta_plus >= denominator we already have
591 // 1 <= numerator/denominator < 10. Simply update the estimated_power.
595 numerator->Times10();