Module: sage.rings.rational_field
Field
of Rational Numbers.
The class RationalField represents the field
of
(arbitrary precision) rational numbers. Each rational number is an
instance of the class Rational.
Interactively, an instance of RationalField is available as
QQ
.
sage: QQ Rational Field
Values of various types can be converted to rational numbers by
using the __call__
method of RationalField (that is,
by treating QQ
as a function).
sage: RealField(9).pi() 3.1 sage: QQ(RealField(9).pi()) 22/7 sage: QQ(RealField().pi()) 245850922/78256779 sage: QQ(35) 35 sage: QQ('12/347') 12/347 sage: QQ(exp(pi*I)) -1 sage: x = polygen(ZZ) sage: QQ((3*x)/(4*x)) 3/4
TEST:
sage: Q = RationalField() sage: Q == loads(dumps(Q)) True sage: RationalField() is RationalField() True
Module-level Functions
x) |
n, d) |
x) |
Class: RationalField
self) |
We create the rational numbers
, and call a few functions:
sage: Q = RationalField(); Q Rational Field sage: Q.characteristic() 0 sage: Q.is_field() True sage: Q.zeta() -1
We next illustrate arithmetic in
.
sage: Q('49/7') 7 sage: type(Q('49/7')) <type 'sage.rings.rational.Rational'> sage: a = Q('19/374'); b = Q('17/371'); print a, b 19/374 17/371 sage: a + b 13407/138754 sage: b + a 13407/138754 sage: a * b 19/8162 sage: b * a 19/8162 sage: a - b 691/138754 sage: b - a -691/138754 sage: a / b 7049/6358 sage: b / a 6358/7049 sage: b < a True sage: a < b False
Next finally illustrate arithmetic with automatic coercion.
The types that coerce into the rational field include
str, int, long, Integer
.
sage: a + Q('17/371') 13407/138754 sage: a * 374 19 sage: 374 * a 19 sage: a/19 1/374 sage: a + 1 393/374
TESTS:
sage: QQ.variable_name() 'x' sage: QQ.variable_names() ('x',)
Functions: absolute_degree,
characteristic,
coerce_map_from_impl,
completion,
complex_embedding,
construction,
degree,
discriminant,
embeddings,
extension,
gen,
gens,
is_absolute,
is_atomic_repr,
is_field,
is_finite,
is_prime_field,
is_subring,
maximal_order,
ngens,
number_field,
order,
random_element,
signature,
zeta
self) |
sage: QQ.absolute_degree() 1
self) |
Return 0, since the rational field has characteristic 0.
sage: c = QQ.characteristic(); c 0 sage: parent(c) Integer Ring
self, S) |
sage: f = QQ.coerce_map_from(ZZ); f Natural morphism: From: Integer Ring To: Rational Field sage: f(3) 3 sage: f(3^99) - 3^99 0 sage: f = QQ.coerce_map_from(int); f Native morphism: From: Set of Python objects of type 'int' To: Rational Field sage: f(44) 44
self, [prec=53]) |
Return embedding of the rational numbers into the complex numbers.
sage: QQ.complex_embedding() Ring morphism: From: Rational Field To: Complex Field with 53 bits of precision Defn: 1 |--> 1.00000000000000 sage: QQ.complex_embedding(20) Ring morphism: From: Rational Field To: Complex Field with 20 bits of precision Defn: 1 |--> 1.0000
self) |
sage: QQ.degree() 1
self) |
Return the discriminant of the field of rational numbers, which is 1.
sage: QQ.discriminant() 1
self, K) |
Return list of the one embedding of
into
, if it exists.
sage: QQ.embeddings(QQ) [Ring Coercion endomorphism of Rational Field] sage: QQ.embeddings(CyclotomicField(5)) [Ring Coercion morphism: From: Rational Field To: Cyclotomic Field of order 5 and degree 4]
must have characteristic 0:
sage: QQ.embeddings(GF(3)) Traceback (most recent call last): ... ValueError: no embeddings of the rational field into K.
self, poly, names, [check=True]) |
We make a single absolute extension:
sage: K.<a> = QQ.extension(x^3 + 5); K Number Field in a with defining polynomial x^3 + 5
We make an extension generated by roots of two polynomials:
sage: K.<a,b> = QQ.extension([x^3 + 5, x^2 + 3]); K Number Field in a with defining polynomial x^3 + 5 over its base field sage: b^2 -3 sage: a^3 -5
self, [n=0]) |
sage: QQ.gen() 1
self) |
sage: QQ.gens() (1,)
self) |
is an absolute extension of
.
sage: QQ.is_absolute() True
self) |
Return True
, since the rational field is a field.
sage: QQ.is_field() True
self) |
Return False
, since the rational field is not finite.
sage: QQ.is_finite() False
self) |
Return True
, since
is a prime field.
sage: QQ.is_prime_field() True
self, K) |
Return True
if
is a subring of
.
We are only able to determine this in some cases, e.g., when
is a field or of positive characteristic.
sage: QQ.is_subring(QQ) True sage: QQ.is_subring(QQ['x']) True sage: QQ.is_subring(GF(7)) False sage: QQ.is_subring(CyclotomicField(7)) True sage: QQ.is_subring(ZZ) False sage: QQ.is_subring(Frac(ZZ)) True
self) |
Return the maximal order of the rational numbers,
i.e., the ring
of integers.
sage: QQ.maximal_order() Integer Ring sage: QQ.ring_of_integers () Integer Ring
self) |
sage: QQ.ngens() 1
self) |
Return the number field associated to
. Since
is a number field, this just returns
again.
sage: QQ.number_field() is QQ True
self) |
sage: QQ.order() +Infinity
self, [num_bound=None], [den_bound=None], [distribution=None]) |
sage: QQ.random_element(10,10) # random output -5/3
self) |
Return the signature of the rational field, which is (1,0), since there are 1 real and no complex embeddings.
sage: QQ.signature() (1, 0)
self, [n=2]) |
Return a root of unity in self
.
Input:
sage: QQ.zeta() -1 sage: QQ.zeta(2) -1 sage: QQ.zeta(1) 1 sage: QQ.zeta(3) Traceback (most recent call last): ... ValueError: no n-th root of unity in rational field
Special Functions: __call__,
__init__,
__iter__,
__len__,
_an_element_impl,
_coerce_impl,
_gap_init_,
_is_valid_homomorphism_,
_latex_,
_magma_init_,
_repr_
self, x, [base=0]) |
Coerce
into the field of rational numbers.
sage: a = long(901824309821093821093812093810928309183091832091) sage: b = QQ(a); b 901824309821093821093812093810928309183091832091 sage: QQ(b) 901824309821093821093812093810928309183091832091 sage: QQ(int(93820984323)) 93820984323 sage: QQ(ZZ(901824309821093821093812093810928309183091832091)) 901824309821093821093812093810928309183091832091 sage: QQ('-930482/9320842317') -930482/9320842317 sage: QQ((-930482, 9320842317)) -930482/9320842317 sage: QQ([9320842317]) 9320842317 sage: QQ(pari(39029384023840928309482842098430284398243982394)) 39029384023840928309482842098430284398243982394 sage: QQ('sage') Traceback (most recent call last): ... TypeError: unable to convert sage to a rational
Coercion from the reals to the rational is done by default using continued fractions.
sage: QQ(RR(3929329/32)) 3929329/32 sage: QQ(-RR(3929329/32)) -3929329/32 sage: QQ(RR(1/7)) - 1/7 0
If you specify an optional second base argument, then the string representation of the float is used.
sage: QQ(23.2, 2) 6530219459687219/281474976710656 sage: 6530219459687219.0/281474976710656 23.199999999999999 sage: a = 23.2; a 23.2000000000000 sage: QQ(a, 10) 116/5
Here's a nice example involving elliptic curves:
sage: E = EllipticCurve('11a') sage: L = E.lseries().at1(300)[0]; L 0.253841860855911 sage: O = E.period_lattice().omega(); O 1.2692093042795534216887946167545473052194922418306086679671369212304083386 13 # 32-bit 1.2692093042795534216887946167545473052194922418306086679671369212304083386 127777226903623059215126073116452962783212874372817003284768439764927140105 7075 # 64-bit sage: t = L/O; t 0.200000000000000 sage: QQ(RealField(45)(t)) 1/5
Elements from the extended rational field can be coerced back into the rational field.
sage: E = ExtendedRationalField sage: QQ(E(2)) 2 sage: type(_) <type 'sage.rings.rational.Rational'>
self) |
Creates an iterator that generates the rational numbers without
repetition. It uses the sequence defined by
and
and generates the
sequence
This example creates a list consisting of the first 10 terms generated by this function.
sage: import itertools sage: [a for a in itertools.islice(Rationals(),10)] [0, 1, -1, 1/2, -1/2, 2, -2, 1/3, -1/3, 3/2]
NOTES: A proof of the correctness of this formula is attributed to Sam Vandervelde and Don Zagier [A002487], but a better reference for the origin of this formula would be welcome.
REFERENCES: [A002487] Sloane's OLEIS, http://www.research.att.com/ njas/sequences/A002487
Author: - Nils Bruin (2007-02-20)
self) |
sage: gap(QQ) Rationals
self) |
sage: magma(QQ) # optional Rational Field