рациональные числа
Этот модуль реализует рациональные числа, состоящие из числителя 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