示例#1
0
 def test_continued_fraction_golden_ratio(self):
     golden_ratio = (1 + math.sqrt(5)) / 2
     expected = [1] * 40
     result = list(contfrac.continued_fraction(golden_ratio, maxlen=2))
     self.assertListEqual(expected[:2], result)
     result = list(contfrac.continued_fraction(golden_ratio, maxlen=20))
     self.assertListEqual(expected[:20], result)
     result = list(contfrac.continued_fraction(golden_ratio, maxlen=31))
     self.assertListEqual(expected[:31], result)
示例#2
0
 def test_rounding_errors(self):
     golden_ratio = (1 + math.sqrt(5)) / 2
     as_ratio = golden_ratio.as_integer_ratio()
     result = list(contfrac.continued_fraction(golden_ratio, maxlen=50))
     self.assertNotEqual([1] * 50, result)
     evaluated_value = contfrac.evaluate(result)
     self.assertEqual(golden_ratio, evaluated_value)
     result = list(contfrac.continued_fraction(as_ratio, maxlen=50))
     self.assertNotEqual([1] * 50, result)
     evaluated_value = contfrac.evaluate(result)
     self.assertEqual(as_ratio, evaluated_value.as_integer_ratio())
示例#3
0
def get_alpha_1_2(alpha):
    coefficients = list(contfrac.continued_fraction(alpha))
    alpha_1 = contfrac_to_fraction(coefficients[:-1])
    coefficients[-1] -= 1
    alpha_2 = contfrac_to_fraction(coefficients)

    return alpha_1, alpha_2
示例#4
0
 def test_example_irrational(self):
     import contfrac
     import math
     coefficients = list(contfrac.continued_fraction(math.e, maxlen=10))
     print(coefficients)
     convergent = contfrac.convergent(math.e, 3)
     print(convergent, convergent[0] / convergent[1], math.e)
     convergent = contfrac.convergent(math.e, 7)
     print(convergent, convergent[0] / convergent[1], math.e)
示例#5
0
 def test_continued_fraction_illegal_maxlen(self):
     self.assertRaises(ValueError,
                       contfrac.continued_fraction,
                       2.2,
                       maxlen=-1)
     self.assertRaises(ValueError,
                       contfrac.continued_fraction,
                       2.2,
                       maxlen=0)
     list(contfrac.continued_fraction(2.2, maxlen=1))
示例#6
0
 def test_example_high_accuracy(self):
     import contfrac
     value = (415, 93)
     coefficients = list(contfrac.continued_fraction(value))
     print(coefficients)
     expression = contfrac.arithmetical_expr(coefficients)
     print('Value: {:} = {:s}'.format(value, expression))
     eval_value = contfrac.evaluate(coefficients)
     print(eval_value, value[0] / value[1])
     convergents = list(contfrac.convergents(value))
     print(convergents)
示例#7
0
 def test_example_usage_as_in_readme(self):
     import contfrac
     value = 415 / 93
     coefficients = list(contfrac.continued_fraction(value))
     print(coefficients)
     expression = contfrac.arithmetical_expr(coefficients)
     print('Value: {:f} = {:s}'.format(value, expression))
     eval_value = contfrac.evaluate(coefficients)
     print(eval_value, value)
     convergents = list(contfrac.convergents(value))
     print(convergents)
示例#8
0
    def test_continued_fraction_legal_values(self):
        test_values = {
            # Integers
            0: [0],
            1: [1],
            123: [123],
            -1: [-1],
            -123: [-123],

            # Tuples: (nominator, denominator)
            (649, 200): [3, 4, 12, 4],
            (415, 93): [4, 2, 6, 7],
            (-649, 200): [-4, 1, 3, 12, 4],
            (415, -93): [-5, 1, 1, 6, 7],

            # Fractions
            fractions.Fraction(649, 200): [3, 4, 12, 4],
            fractions.Fraction(415, 93): [4, 2, 6, 7],
            fractions.Fraction(-649, 200): [-4, 1, 3, 12, 4],
            fractions.Fraction(415, -93): [-5, 1, 1, 6, 7],

            # Floats
            649 / 200: [3, 4, 12, 4],
            -649 / 200: [-3, -4, -12, -4],
            415 / 93: [4, 2, 6, 7],
            0.84375: [0, 1, 5, 2, 2],
        }
        for input_value, expected_output in test_values.items():
            with self.subTest(contfrac_of=input_value):
                result = list(contfrac.continued_fraction(input_value))
                self.assertListEqual(expected_output, result)
                with self.subTest(evaluating_contfrac_of=input_value):
                    if isinstance(input_value, tuple):
                        input_value = input_value[0] / input_value[1]
                    elif isinstance(input_value, fractions.Fraction):
                        input_value = float(input_value)
                    evaluated = contfrac.evaluate(result)
                    self.assertAlmostEqual(input_value, evaluated, delta=1e-8)
示例#9
0
    print("\tMean eq. year without adjustment = {} days, {} hours, {} minutes, {} seconds\n".format(dd,hh,mm,ss))



    approx = (days + adjust) / float(years)
    print("\tAdjusted days =", days + adjust)
    print("\tbasetup =", basetup)
    print("\tendtup =", endtup)
    print("\tDecimal mean eq. year =", approx)

    frac = (days + adjust) / float(years)
    dd, hh, mm, ss = frac2dhms(frac)

    print(("Mean eq. year = {} days, "
           "{} hours, "
           "{} minutes, "
           "{} seconds").format(dd,hh,mm,ss))

    contfrac.main(frac)

    fmt = ("\tx ~= p / q = {p:10} / {q:10} = {d:03} "
           "{h:02}:{m:02}:{s:07.4f} "
           ", p days modulo 7 = {r:1}")

    print("\nContinued fraction approximations in DHMS form:")

    for a, p, q in contfrac.continued_fraction(frac):
        d, h, m, s = frac2dhms(p / float(q))
        r = p % 7
        print(fmt.format(p=p, q=q, d=d, h=h, m=m, s=s, r=r))
示例#10
0
    print(
        "\tMean eq. year without adjustment = {} days, {} hours, {} minutes, {} seconds\n"
        .format(dd, hh, mm, ss))

    approx = (days + adjust) / float(years)
    print("\tAdjusted days =", days + adjust)
    print("\tbasetup =", basetup)
    print("\tendtup =", endtup)
    print("\tDecimal mean eq. year =", approx)

    frac = (days + adjust) / float(years)
    dd, hh, mm, ss = frac2dhms(frac)

    print(("Mean eq. year = {} days, "
           "{} hours, "
           "{} minutes, "
           "{} seconds").format(dd, hh, mm, ss))

    contfrac.main(frac)

    fmt = ("\tx ~= p / q = {p:10} / {q:10} = {d:03} "
           "{h:02}:{m:02}:{s:07.4f} "
           ", p days modulo 7 = {r:1}")

    print("\nContinued fraction approximations in DHMS form:")

    for a, p, q in contfrac.continued_fraction(frac):
        d, h, m, s = frac2dhms(p / float(q))
        r = p % 7
        print(fmt.format(p=p, q=q, d=d, h=h, m=m, s=s, r=r))
示例#11
0
 def test_continued_fraction_is_generators(self):
     result = contfrac.continued_fraction(1)
     self.assertIsInstance(result, typing.Generator)