fmpq – rational numbers¶
-
class
flint.
fmpq
(p=None, q=None)¶ The fmpq type represents multiprecision rational numbers.
>>> fmpq(1,7) + fmpq(50,51) 401/357
-
static
bernoulli
(ulong n, bool cache=False)¶ Returns the Bernoulli number \(B_n\) as an fmpq.
>>> [fmpq.bernoulli(n) for n in range(8)] [1, -1/2, 1/6, 0, -1/30, 0, 1/42, 0] >>> fmpq.bernoulli(50) 495057205241079648212477525/66
If cache is set to True, all the Bernoulli numbers up to n are computed and cached for fast subsequent retrieval. This feature should be used with caution if n is large. Calling
ctx.cleanup()
frees cached Bernoulli numbers.
-
denom
(self)¶ Returns the denominator of self as an fmpz.
-
static
harmonic
(ulong n)¶ Returns the harmonic number \(H_n\) as an fmpq.
>>> [fmpq.harmonic(n) for n in range(6)] [0, 1, 3/2, 11/6, 25/12, 137/60] >>> fmpq.harmonic(50) 13943237577224054960759/3099044504245996706400
-
next
(s, bool signed=True, bool minimal=True)¶ Returns the next rational number after s as ordered by minimal height (if minimal is True) or following the Calkin-Wilf sequence (if minimal is False). If signed is set to False, only the nonnegative rational numbers are considered.
>>> fmpq(23456789,98765432).next() -23456789/98765432 >>> fmpq(23456789,98765432).next(signed=False) 98765432/23456789 >>> fmpq(23456789,98765432).next(signed=False, minimal=False) 98765432/75308643 >>> a, b, c, d = [fmpq(0)], [fmpq(0)], [fmpq(0)], [fmpq(0)] >>> for i in range(20): ... a.append(a[-1].next()) ... b.append(b[-1].next(signed=False)) ... c.append(c[-1].next(minimal=False)) ... d.append(d[-1].next(signed=False, minimal=False)) ... >>> a [0, 1, -1, 1/2, -1/2, 2, -2, 1/3, -1/3, 3, -3, 2/3, -2/3, 3/2, -3/2, 1/4, -1/4, 4, -4, 3/4, -3/4] >>> b [0, 1, 1/2, 2, 1/3, 3, 2/3, 3/2, 1/4, 4, 3/4, 4/3, 1/5, 5, 2/5, 5/2, 3/5, 5/3, 4/5, 5/4, 1/6] >>> c [0, 1, -1, 1/2, -1/2, 2, -2, 1/3, -1/3, 3/2, -3/2, 2/3, -2/3, 3, -3, 1/4, -1/4, 4/3, -4/3, 3/5, -3/5] >>> d [0, 1, 1/2, 2, 1/3, 3/2, 2/3, 3, 1/4, 4/3, 3/5, 5/2, 2/5, 5/3, 3/4, 4, 1/5, 5/4, 4/7, 7/3, 3/8]
-
numer
(self)¶ Returns the numerator of self as an fmpz.
-
p
¶ fmpq.numer(self)
Returns the numerator of self as an fmpz.
-
q
¶ fmpq.denom(self)
Returns the denominator of self as an fmpz.
-
repr
(self)¶
-
str
(self, **kwargs)¶ Converts self to a string, forwarding optional keyword arguments to
fmpz.str()
.>>> fmpq.bernoulli(12).str() '-691/2730' >>> fmpq.bernoulli(100).str(base=2, condense=10) '-110001110{...257 digits...}0011011111/1000001000110010'
-
static