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"