Рациональное число естественным образом представляется
в системе GAP парой целых чисел - числителем и знаменателем, которые являются
взаимно простыми (если ввести сократимую дробь, она будет преобразована в
несократимую). Если знаменатель рационального числа равен единице, то оно
фактически является целым, и в этом случае будет представлено, как целое.
Знак рационального числа определяется знаком числителя, знаменатель же всегда
является положительным числом.
Поскольку GAP может оперировать с целыми числами произвольной величины, то
рациональная арифметика в GAP всегда является точной, даже в случае,
когда числитель и знаменатель записываются с помощью тысяч цифр.
Все вышесказанное демонстрируется следующими примерами:
gap> 2/3;
2/3
gap> 66/123;
22/41 # после сокращения числитель и знаменатель стали взаимно
просты
gap> 17/-13;
-17/13 # знак рационального числа "хранится" в числителе
gap> 121/11;
11 # после сокращения было получено целое число
gap> 18912132/414656456 + 4734788564/7867889513;
48002482065655475/74147072310457862
По аналогии с целыми числами, рациональные числа (как алгебраическая система)
задаются с помощью функции
Rationals:
gap> Size( Rationals ); 2/3 in Rationals;
infinity
true
Функция
IsRat(obj) проверят, является ли
obj рациональным
числом:
gap> IsRat( 2/3 );
true
gap> IsRat( 17/-13 );
true
gap> IsRat( 11 );
true
gap> IsRat( IsRat );
false # поскольку IsRat - функция, а не рациональное число
Аналогично, функции
IsPosRat(obj) и
IsNegRat(obj)
проверяют, является ли
obj соответственно положительным и
отрицательным рациональным числом.
Функция
NumeratorRat возвращает числитель рационального
числа
rat:
gap> NumeratorRat( 2/3 );
2
gap> NumeratorRat( 66/123 );
22 # ответ после сокращения на наибольший общий делитель
gap> NumeratorRat( 17/-13 );
-17 # знак рационального числа "хранится" в числителе
gap> NumeratorRat( 11 );
11 # целые - это рациональные со знаменателем 1
Функция
DenominatorRat возвращает знаменатель рационального
числа
rat:
gap> DenominatorRat( 2/3 );
3
gap> DenominatorRat( 66/123 );
41 # ответ после сокращения на наибольший общий делитель
gap> DenominatorRat( 17/-13 );
13 # знак рационального числа "хранится" в числителе
gap> DenominatorRat( 11 );
1 # целые - это рациональные со знаменателем 1
Функция
Rat(elm) вовзращает рациональное число
rat,
которое определяется типом аргумента
elm. Если
elm
является строкой, состоящей из цифр 0, 1, ... , 9 и знаков '
-'
(в первой позиции), '
/' и десятичной точки '
.',
то
rat - это рациональное число, описываемое данной строкой.
Обратно, функция
String может вычислить строку, описывающую
рациональное число:
gap> Rat( "1/2" ); Rat( "35/14" ); Rat( "35/-27"
); Rat( "3.14159" );
1/2
5/2
-35/27
314159/100000
Random(Rationals) возвращает псевдослучайное число, являющееся
частным двух случайных целых, которые лежат в диапазоне от -10 до 10 в соответствии
с биномиальным распределением. Учтите, что для того, чтобы получить равномерное
распределение целых чисел на заданном диапазоне, необходимо явно указать
этот диапазон в виде
Random( [ low .. high ] ).