std/rationals
SourceEditЭтот модуль реализует рациональные числа, состоящие из числителя и знаменателя. Знаменатель не может быть равен 0.
Пример:
import std/rationals let r1 = 1 // 2 r2 = -3 // 4 doAssert r1 + r2 == -1 // 4 doAssert r1 - r2 == 5 // 4 doAssert r1 * r2 == -3 // 8 doAssert r1 / r2 == -2 // 3
Импорты
- math, hashes
Типы
Процедуры
func `//`[T](num, den: T): Rational[T]
- Более удобная версия initRational.
Пример:
let x = 1 // 3 + 1 // 5 doAssert x == 8 // 15
Source Edit func `^`[T: SomeInteger](x: Rational[T]; y: T): Rational[T]
-
Вычисляет
xв степениy.Показатель степени
yдолжен быть целым числом. Поддерживаются отрицательные показатели степени, но не показатели степени с плавающей точкой.Пример:
doAssert (-3 // 5) ^ 0 == (1 // 1) doAssert (-3 // 5) ^ 1 == (-3 // 5) doAssert (-3 // 5) ^ 2 == (9 // 25) doAssert (-3 // 5) ^ -2 == (25 // 9)
Source Edit
func cmp(x, y: Rational): int
- Сравнивает два рациональных числа. Возвращает
- значение меньше нуля, если
x < y - значение больше нуля, если
x > y - ноль, если
x == y
- значение меньше нуля, если
func `div`[T: SomeInteger](x, y: Rational[T]): T
- Вычисляет рациональное усечённое деление. Исходный код Редактировать
func floorDiv[T: SomeInteger](x, y: Rational[T]): T
-
Вычисляет рациональное деление по наименьшему целому.
Деление по наименьшему целому концептуально определяется как
Исходный код Редактироватьfloor(x / y). Это отличается от оператораdiv, который определён какtrunc(x / y). То есть,divокругляет к нулю, аfloorDivокругляет вниз. func floorMod[T: SomeInteger](x, y: Rational[T]): Rational[T]
-
Вычисляет рациональный остаток от деления по наименьшему целому (модуль).
Это то же самое, что и
Исходный код Редактироватьx - floorDiv(x, y) * y. Эта функция ведёт себя так же, как оператор%в Python. func hash[T](x: Rational[T]): Hash
- Вычисляет хэш для рационального числа
x. Исходный код Редактировать func initRational[T: SomeInteger](num, den: T): Rational[T]
-
Создаёт новое рациональное число с числителем
numи знаменателемden.denне должен быть равен 0.Примечание:
Исходный код Редактироватьden != 0не проверяется, когда включены проверки. func `mod`[T: SomeInteger](x, y: Rational[T]): Rational[T]
- Вычисляет рациональный остаток от деления по усечённому делению (остаток). Это то же самое, что и
x - (x div y) * y. Исходный код Редактировать func reciprocal[T](x: Rational[T]): Rational[T]
- Вычисляет обратное значение
x(1/x). Еслиxравен 0, генерирует исключениеDivByZeroDefect. Исходный код Редактировать func reduce[T: SomeInteger](x: var Rational[T])
-
Приводит рациональное число
xк виду, при котором числитель и знаменатель не имеют общих делителей, кроме 1 (и -1). Еслиxравен 0, генерирует исключениеDivByZeroDefect.Примечание: Это автоматически вызывается различными операциями над рациональными числами.
Пример:
var r = Rational[int](num: 2, den: 4) # 1/2 reduce(r) doAssert r.num == 1 doAssert r.den == 2
Исходный код Редактировать func toFloat[T](x: Rational[T]): float
- Преобразует рациональное число
xвfloat. Исходный код Редактировать func toInt[T](x: Rational[T]): int
- Преобразует рациональное число
xв целое число. Преобразование округляет к нулю, еслиxне содержит целое значение. Исходный код Редактировать func toRational(x: float; n: int = high(int) shr 32): Rational[int] {. ...raises: [], tags: [], forbids: [].}-
Вычисляет наилучшее рациональное приближение
x, где знаменатель меньшеn(по умолчанию - наибольшее возможноеintдля максимального разрешения).Алгоритм основан на теории непрерывных дробей.
Пример:
let x = 1.2 doAssert x.toRational.toFloat == x
Исходный код Редактировать func toRational[T: SomeInteger](x: T): Rational[T]
- Преобразует целое число
xв рациональное число.Пример:
doAssert toRational(42) == 42 // 1
Исходный код Редактировать
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/rationals.html