Home | History | Annotate | Download | only in src

Lines Matching refs:numerator

52 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
57 Bignum* numerator,
61 // Multiplies numerator/denominator so that its values lies in the range 1-10.
63 // v = numerator'/denominator' * 10^(decimal_point-1)
64 // where numerator' and denominator' are the values of numerator and
68 Bignum* numerator, Bignum* denominator,
72 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
78 Bignum* numerator, Bignum* denominator,
80 // Generates 'count' digits of numerator/denominator.
85 Bignum* numerator, Bignum* denominator,
114 Bignum numerator;
125 &numerator, &denominator,
127 // We now have v = (numerator / denominator) * 10^estimated_power.
129 &numerator, &denominator,
131 // We now have v = (numerator / denominator) * 10^(decimal_point-1), and
132 // 1 <= (numerator + delta_plus) / denominator < 10
135 GenerateShortestDigits(&numerator, &denominator,
141 &numerator, &denominator,
146 &numerator, &denominator,
163 // m- := (numerator - delta_minus) / denominator
164 // m+ := (numerator + delta_plus) / denominator
166 // Precondition: 0 <= (numerator+delta_plus) / denominator < 10.
167 // If 1 <= (numerator+delta_plus) / denominator < 10 then no leading 0 digit
169 static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
181 digit = numerator->DivideModuloIntBignum(*denominator);
183 // digit = numerator / denominator (integer division).
184 // numerator = numerator % denominator.
195 in_delta_room_minus = Bignum::LessEqual(*numerator, *delta_minus);
197 in_delta_room_minus = Bignum::Less(*numerator, *delta_minus);
201 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
204 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
208 numerator->Times10();
217 // Let's see if 2*numerator < denominator.
219 int compare = Bignum::PlusCompare(*numerator, *numerator, *denominator);
261 // Let v = numerator / denominator < 10.
268 Bignum* numerator, Bignum* denominator,
273 digit = numerator->DivideModuloIntBignum(*denominator);
275 // digit = numerator / denominator (integer division).
276 // numerator = numerator % denominator.
279 numerator->Times10();
283 digit = numerator->DivideModuloIntBignum(*denominator);
284 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
308 // Input verifies: 1 <= (numerator + delta) / denominator < 10.
310 Bignum* numerator, Bignum* denominator,
331 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
347 numerator, denominator,
402 Bignum* numerator, Bignum* denominator,
409 // numerator = v.
410 numerator->AssignUInt64(Double(v).Significand());
411 numerator->ShiftLeft(Double(v).Exponent());
419 numerator->ShiftLeft(1);
438 numerator->ShiftLeft(1); // *2
448 Bignum* numerator, Bignum* denominator,
456 // numerator = significand
458 // numerator = v * / 2^-exponent
459 numerator->AssignUInt64(significand);
468 numerator->ShiftLeft(1);
488 numerator->ShiftLeft(1); // *2
498 Bignum* numerator, Bignum* denominator,
505 // multiply all values (numerator and deltas) by 10^-estimated_power.
507 // Use numerator as temporary container for power_ten.
508 Bignum* power_ten = numerator;
512 // Since power_ten == numerator we must make a copy of 10^estimated_power
513 // before we complete the computation of the numerator.
519 // numerator = significand * 2 * 10^-estimated_power
521 // numerator = v * 10^-estimated_power * 2 * 2^-exponent.
522 // Remember: numerator has been abused as power_ten. So no need to assign it
524 ASSERT(numerator == power_ten);
525 numerator->MultiplyByUInt64(significand);
534 numerator->ShiftLeft(1);
548 numerator->ShiftLeft(1); // *2
557 // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
566 // - a scaled numerator: s.t. numerator/denominator == v / 10^estimated_power.
576 // v / 10^ep = numerator / denominator.
586 // we then have 0.1 <= numerator/denominator < 1
587 // or 1 <= numerator/denominator < 10
595 Bignum* numerator,
602 numerator, denominator, delta_minus, delta_plus);
606 numerator, denominator, delta_minus, delta_plus);
610 numerator, denominator, delta_minus, delta_plus);
615 // This routine multiplies numerator/denominator so that its values lies in the
617 // 1 <= (numerator + delta_plus) /denominator < 10.
618 // Let numerator the input before modification and numerator' the argument
620 // numerator / denominator * 10^estimated_power ==
621 // numerator' / denominator' * 10^(decimal_point - 1)
624 // estimated_power) but do not touch the numerator or denominator.
625 // Otherwise the routine multiplies the numerator and the deltas by 10.
628 Bignum* numerator, Bignum* denominator,
634 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
636 in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
639 // Since numerator + delta_plus >= denominator we already have
640 // 1 <= numerator/denominator < 10. Simply update the estimated_power.
644 numerator->Times10();