Home | History | Annotate | Download | only in src

Lines Matching full:numerator

55 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
60 Bignum* numerator,
64 // Multiplies numerator/denominator so that its values lies in the range 1-10.
66 // v = numerator'/denominator' * 10^(decimal_point-1)
67 // where numerator' and denominator' are the values of numerator and
71 Bignum* numerator, Bignum* denominator,
75 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
81 Bignum* numerator, Bignum* denominator,
83 // Generates 'count' digits of numerator/denominator.
88 Bignum* numerator, Bignum* denominator,
117 Bignum numerator;
128 &numerator, &denominator,
130 // We now have v = (numerator / denominator) * 10^estimated_power.
132 &numerator, &denominator,
134 // We now have v = (numerator / denominator) * 10^(decimal_point-1), and
135 // 1 <= (numerator + delta_plus) / denominator < 10
138 GenerateShortestDigits(&numerator, &denominator,
144 &numerator, &denominator,
149 &numerator, &denominator,
166 // m- := (numerator - delta_minus) / denominator
167 // m+ := (numerator + delta_plus) / denominator
169 // Precondition: 0 <= (numerator+delta_plus) / denominator < 10.
170 // If 1 <= (numerator+delta_plus) / denominator < 10 then no leading 0 digit
172 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
184 digit = numerator->DivideModuloIntBignum(*denominator);
186 // digit = numerator / denominator (integer division).
187 // numerator = numerator % denominator.
198 in_delta_room_minus = Bignum::LessEqual(*numerator, *delta_minus);
200 in_delta_room_minus = Bignum::Less(*numerator, *delta_minus);
204 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
207 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
211 numerator->Times10();
220 // Let's see if 2*numerator < denominator.
222 int compare = Bignum::PlusCompare(*numerator, *numerator, *denominator);
264 // Let v = numerator / denominator < 10.
271 Bignum* numerator, Bignum* denominator,
276 digit = numerator->DivideModuloIntBignum(*denominator);
278 // digit = numerator / denominator (integer division).
279 // numerator = numerator % denominator.
282 numerator->Times10();
286 digit = numerator->DivideModuloIntBignum(*denominator);
287 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
311 // Input verifies: 1 <= (numerator + delta) / denominator < 10.
313 Bignum* numerator, Bignum* denominator,
334 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
350 numerator, denominator,
405 Bignum* numerator, Bignum* denominator,
412 // numerator = v.
413 numerator->AssignUInt64(Double(v).Significand());
414 numerator->ShiftLeft(Double(v).Exponent());
422 numerator->ShiftLeft(1);
441 numerator->ShiftLeft(1); // *2
451 Bignum* numerator, Bignum* denominator,
459 // numerator = significand
461 // numerator = v * / 2^-exponent
462 numerator->AssignUInt64(significand);
471 numerator->ShiftLeft(1);
491 numerator->ShiftLeft(1); // *2
501 Bignum* numerator, Bignum* denominator,
508 // multiply all values (numerator and deltas) by 10^-estimated_power.
510 // Use numerator as temporary container for power_ten.
511 Bignum* power_ten = numerator;
515 // Since power_ten == numerator we must make a copy of 10^estimated_power
516 // before we complete the computation of the numerator.
522 // numerator = significand * 2 * 10^-estimated_power
524 // numerator = v * 10^-estimated_power * 2 * 2^-exponent.
525 // Remember: numerator has been abused as power_ten. So no need to assign it
527 ASSERT(numerator == power_ten);
528 numerator->MultiplyByUInt64(significand);
537 numerator->ShiftLeft(1);
551 numerator->ShiftLeft(1); // *2
560 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
569 // - a scaled numerator: s.t. numerator/denominator == v / 10^estimated_power.
579 // v / 10^ep = numerator / denominator.
589 // we then have 0.1 <= numerator/denominator < 1
590 // or 1 <= numerator/denominator < 10
598 Bignum* numerator,
605 numerator, denominator, delta_minus, delta_plus);
609 numerator, denominator, delta_minus, delta_plus);
613 numerator, denominator, delta_minus, delta_plus);
618 // This routine multiplies numerator/denominator so that its values lies in the
620 // 1 <= (numerator + delta_plus) /denominator < 10.
621 // Let numerator the input before modification and numerator' the argument
623 // numerator / denominator * 10^estimated_power ==
624 // numerator' / denominator' * 10^(decimal_point - 1)
627 // estimated_power) but do not touch the numerator or denominator.
628 // Otherwise the routine multiplies the numerator and the deltas by 10.
631 Bignum* numerator, Bignum* denominator,
637 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
639 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
642 // Since numerator + delta_plus >= denominator we already have
643 // 1 <= numerator/denominator < 10. Simply update the estimated_power.
647 numerator->Times10();