Spec-Zone.ru › Nim

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

Типы

Rational[T] = object
  num*, den*: T
Рациональное число, состоящее из числителя num и знаменателя den. Source Edit

Процедуры

func `$`[T](x: Rational[T]): string
Преобразует рациональное число в строку.

Пример:

doAssert $(1 // 2) == "1/2"
Source Edit
func `*`[T](x, y: Rational[T]): Rational[T]
Перемножает два рациональных числа. Source Edit
func `*`[T](x: Rational[T]; y: T): Rational[T]
Перемножает рациональное x с целым y. Source Edit
func `*`[T](x: T; y: Rational[T]): Rational[T]
Перемножает целое x с рациональным y. Source Edit
func `*=`[T](x: var Rational[T]; y: Rational[T])
Перемножает рациональное x на y на месте. Source Edit
func `*=`[T](x: var Rational[T]; y: T)
Перемножает рациональное x на целое y на месте. Source Edit
func `+`[T](x, y: Rational[T]): Rational[T]
Складывает два рациональных числа. Source Edit
func `+`[T](x: Rational[T]; y: T): Rational[T]
Прибавляет рациональное x к целому y. Source Edit
func `+`[T](x: T; y: Rational[T]): Rational[T]
Прибавляет целое x к рациональному y. Source Edit
func `+=`[T](x: var Rational[T]; y: Rational[T])
Прибавляет рациональное y к рациональному x на месте. Source Edit
func `+=`[T](x: var Rational[T]; y: T)
Прибавляет целое y к рациональному x на месте. Source Edit
func `-`[T](x, y: Rational[T]): Rational[T]
Вычитает два рациональных числа. Source Edit
func `-`[T](x: Rational[T]): Rational[T]
Унарный минус для рациональных чисел. Source Edit
func `-`[T](x: Rational[T]; y: T): Rational[T]
Вычитает целое y из рационального x. Source Edit
func `-`[T](x: T; y: Rational[T]): Rational[T]
Вычитает рациональное y из целого x. Source Edit
func `-=`[T](x: var Rational[T]; y: Rational[T])
Вычитает рациональное y из рационального x на месте. Source Edit
func `-=`[T](x: var Rational[T]; y: T)
Вычитает целое y из рационального x на месте. Source Edit
func `/`[T](x, y: Rational[T]): Rational[T]
Делит рациональное x на рациональное y. Source Edit
func `/`[T](x: Rational[T]; y: T): Rational[T]
Делит рациональное x на целое y. Source Edit
func `/`[T](x: T; y: Rational[T]): Rational[T]
Делит целое x на рациональное y. Source Edit
func `//`[T](num, den: T): Rational[T]
Более удобная версия initRational.

Пример:

let x = 1 // 3 + 1 // 5
doAssert x == 8 // 15
Source Edit
func `/=`[T](x: var Rational[T]; y: Rational[T])
Делит рациональное x на рациональное y на месте. Source Edit
func `/=`[T](x: var Rational[T]; y: T)
Делит рациональное x на целое y на месте. Source Edit
func `<`(x, y: Rational): bool
Возвращает true, если x меньше y. Source Edit
func `<=`(x, y: Rational): bool
Возвращает true, если x меньше или равно y. Source Edit
func `==`(x, y: Rational): bool
Сравнивает два рациональных числа на равенство. 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 abs[T](x: Rational[T]): Rational[T]
Возвращает абсолютное значение x.

Пример:

doAssert abs(1 // 2) == 1 // 2
doAssert abs(-1 // 2) == 1 // 2
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API