Lines Matching refs:denominator
29 // and denominator.
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
38 // denominator after the call to this function.
41 Bignum* denominator, Bignum* delta_minus,
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,
87 Bignum denominator;
91 // 4e-324. In this case the denominator needs fewer than 324*4 binary digits.
97 &denominator, &delta_minus, &delta_plus);
98 // We now have v = (numerator / denominator) * 10^estimated_power.
100 &denominator, &delta_minus, &delta_plus);
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,
114 &denominator, buffer, length);
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.
167 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
170 Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
183 // Let's see if 2*numerator < denominator.
185 int compare = Bignum::PlusCompare(*numerator, *numerator, *denominator);
189 // Remaining digits are more than .5 of denominator. -> Round up.
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.
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,
292 // Initially the fraction lies in range (1, 10]. Multiply the denominator
294 denominator->Times10();
295 if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
310 GenerateCountedDigits(needed_digits, decimal_point, numerator, denominator,
364 Bignum* denominator, Bignum* delta_minus, Bignum* delta_plus) {
367 // Since the estimated_power is positive we simply multiply the denominator
373 // denominator = 10^estimated_power.
374 denominator->AssignPowerUInt16(10, estimated_power);
377 // Introduce a common denominator so that the deltas to the boundaries are
379 denominator->ShiftLeft(1);
382 // denominator (of 2) delta_plus equals 2^e.
397 // Increase the common denominator and adapt all but the delta_minus.
398 denominator->ShiftLeft(1); // *2
408 Bignum* denominator, Bignum* delta_minus, Bignum* delta_plus) {
419 // denominator = 10^estimated_power * 2^-exponent (with exponent < 0)
420 denominator->AssignPowerUInt16(10, estimated_power);
421 denominator->ShiftLeft(-exponent);
424 // Introduce a common denominator so that the deltas to the boundaries are
426 denominator->ShiftLeft(1);
429 // denominator (of 2) delta_plus equals 2^e.
430 // Given that the denominator already includes v's exponent the distance
445 // Increase the denominator and adapt all but the delta_minus.
446 denominator->ShiftLeft(1); // *2
456 Bignum* denominator, Bignum* delta_minus, Bignum* delta_plus) {
460 // Instead of multiplying the denominator with 10^estimated_power we
483 // denominator = 2 * 2^-exponent with exponent < 0.
484 denominator->AssignUInt16(1);
485 denominator->ShiftLeft(-exponent);
488 // Introduce a common denominator so that the deltas to the boundaries are
491 denominator->ShiftLeft(1);
505 denominator->ShiftLeft(1); // *2
513 // and denominator. The functions GenerateShortestDigits and
521 // - a scaled numerator: s.t. numerator/denominator == v / 10^estimated_power.
522 // - a scaled (common) denominator.
528 // v, m+, m-, and therefore v - m- and m+ - v all share the same denominator.
531 // v / 10^ep = numerator / denominator.
533 // m- / 10^ep == v / 10^ep - delta_minus / denominator
534 // m+ / 10^ep == v / 10^ep + delta_plus / denominator
536 // m- == v - delta_minus * 10^ep / denominator;
537 // m+ == v + delta_plus * 10^ep / 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.
571 // numerator / denominator * 10^estimated_power ==
572 // numerator' / denominator' * 10^(decimal_point - 1)
575 // estimated_power) but do not touch the numerator or denominator.
579 Bignum* denominator, Bignum* delta_minus,
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.