Ruby/Справочник/Rational
Класс Rational < Numeric[править]
Класс Rational реализует работу с рациональными числами (известные в простонародье, как натуральные дроби).
Создание рационального числа:
Rational(a, b) #-> a/b
Rational.new!(a, b) #-> a/b
Например:
Rational(5,6) #-> 5/6
Rational(5) #-> 5/1
Рациональные числа автоматически нормируются (читай, «делит числитель и знаменатель на их НОД»):
Rational(6, 10) #-> 3/5
Но не во время создания методом new!:
Rational.new!(6, 10) #-> 6/10
Деление на ноль — недопустимо (то есть знаменатель не должен равняться нулю):
Rational(3, 0) #-> ZeroDivisionError
Методы класса
Методы объекта
%, **, *, +, -, /, <=>, ==, abs, coerce, divmod, hash, inspect, to_f, to_i, to_r, to_s
Атрибуты
denominator, numerator
Rational::new![править]
Rational.new!(num,den) #-> rational
Реализует конструктор. Этот метод не нормализует (читай, «не делит числитель и знаменатель на их НОД») полученную рациональную дробь и не проверяет знаменатель на равенство нулю.
Rational.new!(6, 10) #-> Rational(6, 10)
Rational.new!(6, 0) #-> Rational(6, 0)
![]() |
Для того, чтобы во время создания рационального числа производить нормализацию и проверку на равенство знаменателю нулю, необходимо использовать метод Rational() |
Rational::reduce[править]
Rational.reduce(num,den) #-> rational
Создает и нормализует рациональное число путем деления числителя и знаменателя на их НОД.
![]() |
Внимание! Метод reduce не рекомендован к использованию! Используйте метод Rational(), который идентичен данному |
Rational#%[править]
r % other #-> numeric
Возвращает остаток от деления числа r на число other.
r = Rational(7,4) #-> Rational(7,4)
r % Rational(1,2) #-> Rational(1,4)
r % 1 #-> Rational(3,4)
r % Rational(1,7) #-> Rational(1,28)
r % 0.26 #-> 0.19
Rational#*[править]
r * other #-> numeric
Возвращает произведение числа r и числа other.
r = Rational(3, 4) #-> Rational(3, 4)
r * 2 #-> Rational(3, 2)
r * 4 #-> Rational(3, 1)
r * 0.5 #-> 0.375
r * Rational(1, 2) #-> Rational(3, 8)
Rational#**[править]
r ** other #-> numeric
Возвращает результат возведения числа r в степень other.
r = Rational(6, 8) #-> Rational(3, 4)
r ** 2 #-> Rational(9, 16)
r ** 2.0 #-> 0.5625
r ** Rational(1,2) #-> 0.866025403784439
Rational#+[править]
r + other #-> numeric
Возвращает сумму чисел r и other.
r = Rational(6, 8) #-> Rational(3, 4)
r + 1 #-> Rational(7, 4)
r + 0.5 #-> 1.25
Rational#-[править]
r - other #-> numeric
Возвращает реузльтат вычитания из числа r числа other.
r = Rational(6, 8) #-> Rational(3, 4)
r - 1 #-> Rational(-1, 4)
r - 0.5 #-> 0.25
Rational#/[править]
r / other #-> numeric
Возвращает результат деления числа r на число other.
r = Rational(3, 4) #-> Rational(3, 4)
r / 2 #-> Rational(3, 8)
r / 2.0 #-> 0.375
r / Rational(1, 2) #-> Rational(3, 2)
Rational#<=>[править]
r <=> other #-> -1, 0, +1
Стандартная операция сравнения двух чисел (r и other). Возвращает −1, 0 или +1, если r больше, равно или меньше other, соответственно. Данный метод необходим, чтобы заработала примесь Comparable класса Numeric (а заодно и для класса Rational, так как он является наследником Numeric).
Rational#[править]
r == other #-> true или false
Возвращает true, если значение r численно равно other. Число r равно числу other, если их числители и знаменатели равны между собой.
Rational(1, 2) == Rational(4, 8) #-> true
Rational(1, 2) == Rational.new!(4, 8) #-> false
![]() |
Внимание! Еще раз повторяем - не используйте метод new!, так как вам придется иметь дело с ненормированным рациональным числом, а это, в свою очередь, может породить массу проблем, так как многие методы предполагают работу с уже нормированными числами |
Rational#abs[править]
r.abs #-> rational
Возвращает абсолютное значение числа r.
Rational(-3, 2).abs #-> Rational(3, 2)
Rational(3, -2).abs #-> Rational(3, 2)
Rational#coerce[править]
r.coerce(other) #-> array
Возвращает массив, состоящий из чисел other и r преобразованных к одному типу. Необходим для арифметических операций между числами разных типов.
r = Rational(6, 4) #-> Rational(3, 2)
r.coerce(3) #-> [Rational(3, 1), Rational(3, 2)]
r.coerce(3.2) #-> [3.2, 1.5]
Rational#divmod[править]
r.divmod(other) #-> array
Возвращает массив, состоящий из частного и остатка от деления числа r на число other.
r = Rational(7, 4) #-> Rational(7, 4)
r.divmod Rational(1, 2) #-> [3, Rational(1, 4)]
r.divmod 3 #-> [0, Rational(7, 4)]
Rational#hash[править]
r.hash #-> fixnum
Возвращает контрольную сумму числа r.
Rational(7, 400).hash #-> 814
Rational(7, 4).hash #-> 6
Rational#inspect[править]
r.inspect #-> string
Возвращает восстановленное строковое представление числа r.
Rational(5, 8).inspect #-> "Rational(5, 8)"
Rational#to_f[править]
r.to_f #-> float
Преобразует число r в дробное.
Rational#to_i[править]
r.to_i #-> integer
Преобразует число r в целое. Преобразование осуществляется не усечением дробной части, а округлением до ближайшего целого.
Rational(+7, 4).to_i #-> 1
Rational(-7, 4).to_i #-> -2
Иначе говоря:
Rational(-7, 4) == -1.75 #-> true
Rational(-7, 4).to_i == (-1.75).to_i #-> false
Rational#to_r[править]
r.to_r #-> r
Возвращает значение r.
Rational#to_s[править]
r.to_s #-> string
Возвращает строковое представление рационального числа.
Rational(3,4).to_s #-> "3/4"
Rational(8).to_s #-> "8"