Exemplo n.º 1
0
 def exponent(self, p, q, digits):
     if not self.integer_check(q) or p == 1:
         return
     base = math.log2(
         max(p.rational_part.numerator, p.rational_part.denominator))
     exp = Expression.power(p, q), Expression.power(p, Expression.negate(q))
     q_max = q.rational_part.numerator
     while base * q_max > self.MAX_DIGITS << p.quadratic_power:
         if q_max & 1 == 0:
             q_max >>= 1
             exp = Expression.sqrt(exp[0]), Expression.sqrt(exp[1])
         else:
             return
     q_min = q_max
     while q_min & 1 == 0:
         q_min >>= 1
         exp = Expression.sqrt(exp[0]), Expression.sqrt(exp[1])
     q = q_min
     x = p**q
     while q <= q_max:
         if not self.range_check(x):
             break
         self.check(x, digits, exp[0], need_sqrt=q == q_min)
         self.check(Quadratic.inverse(x),
                    digits,
                    exp[1],
                    need_sqrt=q == q_min)
         q <<= 1
         x = Quadratic.square(x)
         if q <= q_max:
             exp = exp[0].args[0], exp[1].args[0]
Exemplo n.º 2
0
 def sqrt(self, x, digits):
     if x.quadratic_power < self.MAX_QUADRATIC_POWER:
         y = Quadratic.sqrt(x)
         if y is not None:
             self.check(y, digits, Expression.sqrt(x))
Exemplo n.º 3
0
def test_bad_input():

    with pytest.raises(TypeError):
        q = Quadratic(2, 3)
Exemplo n.º 4
0
def test_evaluate():
    q = Quadratic(1, 2, 3)

    assert q(3) == 9 + 6 + 3
    assert q(0) == 3
Exemplo n.º 5
0
def test_evaluate2():
    q = Quadratic(2, 1, -3)

    assert q(0) == -3
    assert q(1) == 2 + 1 - 3
    assert q(-2) == 8 - 2 - 3
Exemplo n.º 6
0
def test_init():
    q = Quadratic(1, 2, 3)
Exemplo n.º 7
0
def test_neg_quad():
    q = Quadratic(-1, 1, 4)
    assert q(3) == -2
    assert q(-2) == -2
Exemplo n.º 8
0
def test_quad():
    q = Quadratic(1, 2, 3)
    assert q(3) == 18
    q2 = Quadratic(1, 1, 1)
    assert q2(1) == 3
Exemplo n.º 9
0
 def setUp(self):
     self.first_quadratic = Quadratic('2x**2 + 3x + 5')
     self.sec_quadratic = Quadratic('3x**2')
     self.third_quadratic = Quadratic('-4x**2 - 2x + 2')
Exemplo n.º 10
0
 def test_quadratic(self):
   _quadratic = Quadratic()
   self.assertEqual((-2.0, -1.0), _quadratic.solve(3, 2))