def test_newton4sqrt2(): """ Applies Newton's method to approximate the square root of two with double double arithmetic. """ x = [2.0, 0.0] print 'step 0 :', doubleDouble.str(x[0],x[1]) for i in range(1,9): z = doubleDouble.mul(x[0],x[1],x[0],x[1]) z = doubleDouble.add(z[0],z[1],2.0,0.0) z = doubleDouble.div(z[0],z[1],x[0],x[1]) z = doubleDouble.mul(z[0],z[1],0.5,0.0) x[0] = z[0] x[1] = z[1] print 'step', i, ':', doubleDouble.str(x[0],x[1])
def test_arithmetic(): """ Basic test on arithmetical operations. """ hi = 1.4142135623730951 lo = -9.6672933134529147e-17 x = (hi,lo) # defines the sqrt(2) print 'x = sqrt(2) = ', doubleDouble.str(x[0],x[1]) y = (1.0,0.0) z = doubleDouble.add(x[0],x[1],y[0],y[1]) print 'x + 1 = ', doubleDouble.str(z[0],z[1]) xx = doubleDouble.sub(z[0],z[1],y[0],y[1]) print 'x + 1 - 1 = ', doubleDouble.str(x[0],x[1]) x2 = doubleDouble.mul(x[0],x[1],x[0],x[1]) print 'x*x = ', doubleDouble.str(x2[0],x2[1]) x2dx = doubleDouble.div(x2[0],x2[1],x[0],x[1]) print 'x*x/x = ', doubleDouble.str(x2dx[0],x2dx[1])
def __mul__(self,other): """ Returns the product of two double doubles. """ z = doubleDouble.mul(self.high,self.low,other.high,other.low) return DoubleDouble(z[0],z[1])