Spec-Zone.ru › Nim 1

рациональные числа

Этот модуль реализует рациональные числа, состоящие из числителя num и знаменателя den, оба типа int. Знаменатель не может быть равен 0.

Импорты

math, hashes

Типы

Rational[T] = object
  num*, den*: T
рациональное число, состоящее из числителя и знаменателя Исходный код Редактировать

Процедуры

proc initRational[T: SomeInteger](num, den: T): Rational[T]
Создать новое рациональное число. Исходный код Редактировать
proc `//`[T](num, den: T): Rational[T]
Более удобный вариант initRational. Пример использования:
var x = 1//3 + 1//5
Исходный код Редактировать
proc `$`[T](x: Rational[T]): string
Преобразовать рациональное число в строку. Исходный код Редактировать
proc toRational[T: SomeInteger](x: T): Rational[T]
Преобразовать целое число x в рациональное число. Исходный код Редактировать
proc toRational(x: float; n: int = high(int) shr 32): Rational[int] {...}{.
    raises: [], tags: [].}

Вычисляет наилучший рациональный числитель и знаменатель, приближающий значение x, где знаменатель меньше n (по умолчанию - максимальное возможное целое число для максимального разрешения).

Алгоритм основан на теории непрерывных дробей.

import math, rationals
for i in 1..10:
  let t = (10 ^ (i+3)).int
  let x = toRational(PI, t)
  let newPI = x.num / x.den
  echo x, " ", newPI, " error: ", PI - newPI, "  ", t
Исходный код Редактировать
proc toFloat[T](x: Rational[T]): float
Преобразовать рациональное число x в число с плавающей точкой. Исходный код Редактировать
proc toInt[T](x: Rational[T]): int
Преобразовать рациональное число x в целое число. Преобразование округляет к нулю, если x не содержит целого значения. Исходный код Редактировать
proc reduce[T: SomeInteger](x: var Rational[T])
Сократить рациональное число x. Исходный код Редактировать
proc `+`[T](x, y: Rational[T]): Rational[T]
Сложить два рациональных числа. Исходный код Редактировать
proc `+`[T](x: Rational[T]; y: T): Rational[T]
Сложить рациональное число x с целым числом y. Исходный код Редактировать
proc `+`[T](x: T; y: Rational[T]): Rational[T]
Сложить целое число x с рациональным числом y. Исходный код Редактировать
proc `+=`[T](x: var Rational[T]; y: Rational[T])
Сложить рациональное число y с рациональным числом x. Исходный код Редактировать
proc `+=`[T](x: var Rational[T]; y: T)
Сложить целое число y с рациональным числом x. Исходный код Редактировать
proc `-`[T](x: Rational[T]): Rational[T]
Унарный минус для рациональных чисел. Исходный код Редактировать
proc `-`[T](x, y: Rational[T]): Rational[T]
Вычесть два рациональных числа. Исходный код Редактировать
proc `-`[T](x: Rational[T]; y: T): Rational[T]
Вычесть целое число y из рационального числа x. Исходный код Редактировать
proc `-`[T](x: T; y: Rational[T]): Rational[T]
Вычесть рациональное число y из целого числа x. Исходный код Редактировать
proc `-=`[T](x: var Rational[T]; y: Rational[T])
Вычесть рациональное число y из рационального числа x. Исходный код Редактировать
proc `-=`[T](x: var Rational[T]; y: T)
Вычесть целое число y из рационального числа x. Исходный код Редактировать
proc `*`[T](x, y: Rational[T]): Rational[T]
Перемножить два рациональных числа. Исходный код Редактировать
proc `*`[T](x: Rational[T]; y: T): Rational[T]
Перемножить рациональное число x на целое число y. Исходный код Редактировать
proc `*`[T](x: T; y: Rational[T]): Rational[T]
Перемножить целое число x на рациональное число y. Исходный код Редактировать
proc `*=`[T](x: var Rational[T]; y: Rational[T])
Перемножить рациональные числа y и x. Исходный код Редактировать
proc `*=`[T](x: var Rational[T]; y: T)
Перемножить целое число y на рациональное число x. Исходный код Редактировать
proc reciprocal[T](x: Rational[T]): Rational[T]
Вычислить обратное значение x. (1/x) Исходный код Редактировать
proc `/`[T](x, y: Rational[T]): Rational[T]
Разделить рациональные числа x на y. Исходный код Редактировать
proc `/`[T](x: Rational[T]; y: T): Rational[T]
Разделить рациональное число x на целое число y. Исходный код Редактировать
proc `/`[T](x: T; y: Rational[T]): Rational[T]
Разделить целое число x на рациональное y. Исходный код Редактировать
proc `/=`[T](x: var Rational[T]; y: Rational[T])
Разделить рациональные числа x на y на месте. Исходный код Редактировать
proc `/=`[T](x: var Rational[T]; y: T)
Разделить рациональное число x на целое число y на месте. Исходный код Редактировать
proc cmp(x, y: Rational): int
Сравнивает два рациональных числа. Исходный код Редактировать
proc `<`(x, y: Rational): bool
Исходный код Редактировать
proc `<=`(x, y: Rational): bool
Исходный код Редактировать
proc `==`(x, y: Rational): bool
Исходный код Редактировать
proc abs[T](x: Rational[T]): Rational[T]
Исходный код Редактировать
proc `div`[T: SomeInteger](x, y: Rational[T]): T
Вычисляет усечённое деление рациональных чисел. Исходный код Редактировать
proc `mod`[T: SomeInteger](x, y: Rational[T]): Rational[T]
Вычисляет рациональный модуль с помощью усечения при делении (остаток). Это то же самое, что x - (x div y) * y. Исходный код Редактировать
proc floorDiv[T: SomeInteger](x, y: Rational[T]): T

Вычисляет рациональное целочисленное деление.

Целочисленное деление концептуально определяется как floor(x / y). Это отличается от оператора div, который определяется как trunc(x / y). То есть, div округляется до ближайшего 0 целого, а floorDiv округляется вниз.

Исходный код Редактировать
proc floorMod[T: SomeInteger](x, y: Rational[T]): Rational[T]

Вычисляет рациональный модуль с помощью целочисленного деления (модуль).

Это то же самое, что x - floorDiv(x, y) * y. Эта процедура ведет себя так же, как оператор % в языке Python.

Исходный код Редактировать
proc hash[T](x: Rational[T]): Hash
Вычисляет хэш для рационального числа x Исходный код Редактировать

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/rationals.html

Spec-Zone.ru

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