Lines Matching defs:numerator
54 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
59 Bignum* numerator,
63 // Multiplies numerator/denominator so that its values lies in the range 1-10.
65 // v = numerator'/denominator' * 10^(decimal_point-1)
66 // where numerator' and denominator' are the values of numerator and
70 Bignum* numerator, Bignum* denominator,
74 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
80 Bignum* numerator, Bignum* denominator,
82 // Generates 'count' digits of numerator/denominator.
87 Bignum* numerator, Bignum* denominator,
116 Bignum numerator;
127 &numerator, &denominator,
129 // We now have v = (numerator / denominator) * 10^estimated_power.
131 &numerator, &denominator,
133 // We now have v = (numerator / denominator) * 10^(decimal_point-1), and
134 // 1 <= (numerator + delta_plus) / denominator < 10
137 GenerateShortestDigits(&numerator, &denominator,
143 &numerator, &denominator,
148 &numerator, &denominator,
165 // m- := (numerator - delta_minus) / denominator
166 // m+ := (numerator + delta_plus) / denominator
168 // Precondition: 0 <= (numerator+delta_plus) / denominator < 10.
169 // If 1 <= (numerator+delta_plus) / denominator < 10 then no leading 0 digit
171 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
183 digit = numerator->DivideModuloIntBignum(*denominator);
185 // digit = numerator / denominator (integer division).
186 // numerator = numerator % denominator.
197 in_delta_room_minus = Bignum::LessEqual(*numerator, *delta_minus);
199 in_delta_room_minus = Bignum::Less(*numerator, *delta_minus);
203 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
206 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
210 numerator->Times10();
219 // Let's see if 2*numerator < denominator.
221 int compare = Bignum::PlusCompare(*numerator, *numerator, *denominator);
263 // Let v = numerator / denominator < 10.
270 Bignum* numerator, Bignum* denominator,
275 digit = numerator->DivideModuloIntBignum(*denominator);
277 // digit = numerator / denominator (integer division).
278 // numerator = numerator % denominator.
281 numerator->Times10();
285 digit = numerator->DivideModuloIntBignum(*denominator);
286 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
310 // Input verifies: 1 <= (numerator + delta) / denominator < 10.
312 Bignum* numerator, Bignum* denominator,
333 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
349 numerator, denominator,
404 Bignum* numerator, Bignum* denominator,
411 // numerator = v.
412 numerator->AssignUInt64(Double(v).Significand());
413 numerator->ShiftLeft(Double(v).Exponent());
421 numerator->ShiftLeft(1);
440 numerator->ShiftLeft(1); // *2
450 Bignum* numerator, Bignum* denominator,
458 // numerator = significand
460 // numerator = v * / 2^-exponent
461 numerator->AssignUInt64(significand);
470 numerator->ShiftLeft(1);
490 numerator->ShiftLeft(1); // *2
500 Bignum* numerator, Bignum* denominator,
507 // multiply all values (numerator and deltas) by 10^-estimated_power.
509 // Use numerator as temporary container for power_ten.
510 Bignum* power_ten = numerator;
514 // Since power_ten == numerator we must make a copy of 10^estimated_power
515 // before we complete the computation of the numerator.
521 // numerator = significand * 2 * 10^-estimated_power
523 // numerator = v * 10^-estimated_power * 2 * 2^-exponent.
524 // Remember: numerator has been abused as power_ten. So no need to assign it
526 ASSERT(numerator == power_ten);
527 numerator->MultiplyByUInt64(significand);
536 numerator->ShiftLeft(1);
550 numerator->ShiftLeft(1); // *2
559 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
568 // - a scaled numerator: s.t. numerator/denominator == v / 10^estimated_power.
578 // v / 10^ep = numerator / denominator.
588 // we then have 0.1 <= numerator/denominator < 1
589 // or 1 <= numerator/denominator < 10
597 Bignum* numerator,
604 numerator, denominator, delta_minus, delta_plus);
608 numerator, denominator, delta_minus, delta_plus);
612 numerator, denominator, delta_minus, delta_plus);
617 // This routine multiplies numerator/denominator so that its values lies in the
619 // 1 <= (numerator + delta_plus) /denominator < 10.
620 // Let numerator the input before modification and numerator' the argument
622 // numerator / denominator * 10^estimated_power ==
623 // numerator' / denominator' * 10^(decimal_point - 1)
626 // estimated_power) but do not touch the numerator or denominator.
627 // Otherwise the routine multiplies the numerator and the deltas by 10.
630 Bignum* numerator, Bignum* denominator,
636 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
638 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
641 // Since numerator + delta_plus >= denominator we already have
642 // 1 <= numerator/denominator < 10. Simply update the estimated_power.
646 numerator->Times10();