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
Создает и нормализует рациональное число путем деления числителя и знаменателя на их НОД.
[править] 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
[править] 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"