def _init_by_float_float(self, numerator, denominator): """ Initialize by a float numbers. """ dp = 53 frexp_num = math.frexp(numerator) frexp_den = math.frexp(denominator) self.numerator = Integer(frexp_num[0] * 2 ** (2 * dp - frexp_den[1])) self.denominator = Integer(frexp_den[0] * 2 ** (2 * dp - frexp_num[1]))
def _init_by_float_float(self, numerator, denominator): """ Initialize by a float numbers. """ dp = 53 frexp_num = math.frexp(numerator) frexp_den = math.frexp(denominator) self.numerator = Integer(frexp_num[0] * 2**(2 * dp - frexp_den[1])) self.denominator = Integer(frexp_den[0] * 2**(2 * dp - frexp_num[1]))
def _init_by_float_int(self, numerator, denominator): """ Initialize by a float number and an integer. """ dp = 53 frexp = math.frexp(numerator) self.numerator = Integer(frexp[0] * 2 ** dp) self.denominator = Integer(2 ** (dp - frexp[1]) * denominator)
def _init_by_int_float(self, numerator, denominator): """ Initailize by an integer and a float """ dp = 53 frexp_den = math.frexp(denominator) self.numerator = Integer(numerator * (2 ** (dp - frexp_den[1]))) self.denominator = Integer(frexp_den[0] * 2 ** dp)
def _init_by_Rational_float(self, numerator, denominator): """ Initialize by a rational number and a float. """ dp = 53 frexp = math.frexp(denominator) self.numerator = numerator.numerator * (2 ** (dp - frexp[1])) self.denominator = numerator.denominator * (frexp[0] * 2 ** dp)
def _init_by_float_int(self, numerator, denominator): """ Initialize by a float number and an integer. """ dp = 53 frexp = math.frexp(numerator) self.numerator = Integer(frexp[0] * 2**dp) self.denominator = Integer(2**(dp - frexp[1]) * denominator)
def _init_by_int_float(self, numerator, denominator): """ Initailize by an integer and a float """ dp = 53 frexp_den = math.frexp(denominator) self.numerator = Integer(numerator * (2**(dp - frexp_den[1]))) self.denominator = Integer(frexp_den[0] * 2**dp)
def _init_by_Rational_float(self, numerator, denominator): """ Initialize by a rational number and a float. """ dp = 53 frexp = math.frexp(denominator) self.numerator = numerator.numerator * (2**(dp - frexp[1])) self.denominator = numerator.denominator * (frexp[0] * 2**dp)