math
Конструктивная математика естественным образом типизирована. -- Simon Thompson
Базовые математические функции для Nim.
Обратите внимание, что тригонометрические функции естественным образом работают с радианами. Вспомогательные функции degToRad и radToDeg обеспечивают преобразование между радианами и градусами.
import math from sequtils import map let a = [0.0, PI/6, PI/4, PI/3, PI/2] echo a.map(sin) # @[0.0, 0.499…, 0.707…, 0.866…, 1.0] echo a.map(tan) # @[0.0, 0.577…, 0.999…, 1.732…, 1.633…e+16] echo cos(degToRad(180.0)) # -1.0 echo sqrt(-1.0) # nan (use `complex` module)
Этот модуль доступен для целевой платформы JavaScript.
См. также:
- модуль complex для комплексных чисел и их математических операций
- модуль rationals для рациональных чисел и их математических операций
- модуль fenv для обработки округления чисел с плавающей запятой и исключений (переполнение, деление на ноль и т. д.)
- модуль random для быстрого и компактного генератора случайных чисел
- модуль mersenne для генератора случайных чисел Mersenne Twister
- модуль stats для статистического анализа
- модуль strformat для форматирования чисел с плавающей запятой для вывода
-
модуль system Некоторые очень базовые и тривиальные математические операторы находятся непосредственно в модуле system, например
shr,shl,xor,clamp, и т.д.
Импорты
- since, bitops
Типы
FloatClass = enum fcNormal, ## value is an ordinary nonzero floating point value fcSubnormal, ## value is a subnormal (a very small) floating point value fcZero, ## value is zero fcNegZero, ## value is the negative zero fcNan, ## value is Not-A-Number (NAN) fcInf, ## value is positive infinity fcNegInf ## value is negative infinity
- Описывает класс, к которому принадлежит значение с плавающей запятой. Это тип, возвращаемый процедурой classify proc. Исходный код Редактировать
Константы
PI = 3.141592653589793
- Постоянная числа π (число Людольфа) Исходный код Редактировать
TAU = 6.283185307179586
- Постоянная числа Т ( = 2 * π) Исходный код Редактировать
E = 2.718281828459045
- Число Эйлера Исходный код Редактировать
MaxFloat64Precision = 16
- Максимальное количество значащих цифр после запятой для типа Nim
float64. Исходный код Редактировать MaxFloat32Precision = 8
- Максимальное количество значащих цифр после запятой для типа Nim
float32. Исходный код Редактировать MaxFloatPrecision = 16
- Максимальное количество значащих цифр после запятой для типа Nim
float. Исходный код Редактировать MinFloatNormal = 2.225073858507201e-308
- Наименьшее нормализованное число для типа Nim
float(= 2^-1022). Исходный код Редактировать
Процедуры
proc binom(n, k: int): int {...}{.noSideEffect, raises: [], tags: [].}- Вычисляет биномиальный коэффициент.
Пример:
doAssert binom(6, 2) == binom(6, 4) doAssert binom(6, 2) == 15 doAssert binom(-6, 2) == 1 doAssert binom(6, 0) == 1
Исходный код Изменить proc fac(n: int): int {...}{.raises: [], tags: [].}-
Вычисляет факториал неотрицательного целого числа
n.См. также:
Пример:
doAssert fac(3) == 6 doAssert fac(4) == 24 doAssert fac(10) == 3628800
Исходный код Изменить proc classify(x: float): FloatClass {...}{.raises: [], tags: [].}-
Классифицирует значение с плавающей точкой.
Возвращает класс значения
xсогласно перечислению FloatClass.Пример:
doAssert classify(0.3) == fcNormal doAssert classify(0.0) == fcZero doAssert classify(0.3/0.0) == fcInf doAssert classify(-0.3/0.0) == fcNegInf doAssert classify(5.0e-324) == fcSubnormal
Исходный код Изменить proc isPowerOfTwo(x: int): bool {...}{.noSideEffect, raises: [], tags: [].}-
Возвращает
true, еслиxявляется степенью двойки,falseв противном случае.Нулевые и отрицательные числа не являются степенями двойки.
См. также:
Пример:
doAssert isPowerOfTwo(16) == true doAssert isPowerOfTwo(5) == false doAssert isPowerOfTwo(0) == false doAssert isPowerOfTwo(-16) == false
Исходный код Изменить proc nextPowerOfTwo(x: int): int {...}{.noSideEffect, raises: [], tags: [].}-
Возвращает
x, округлённое до ближайшей степени двойки.Нулевые и отрицательные числа округляются до 1.
См. также:
Пример:
doAssert nextPowerOfTwo(16) == 16 doAssert nextPowerOfTwo(5) == 8 doAssert nextPowerOfTwo(0) == 1 doAssert nextPowerOfTwo(-16) == 1
Исходный код Изменить proc sum[T](x: openArray[T]): T {...}{.noSideEffect.}-
Вычисляет сумму элементов в
x.Если
xпуста, возвращается 0.См. также:
Пример:
doAssert sum([1, 2, 3, 4]) == 10 doAssert sum([-1.5, 2.7, -0.1]) == 1.1
Исходный код Изменить proc prod[T](x: openArray[T]): T {...}{.noSideEffect.}-
Вычисляет произведение элементов в
x.Если
xпуста, возвращается 1.См. также:
Пример:
doAssert prod([1, 2, 3, 4]) == 24 doAssert prod([-4, 3, 5]) == -60
Исходный код Изменить proc cumsummed[T](x: openArray[T]): seq[T]
-
Возвращает кумулятивное (префиксное) суммирование
x.См. также:
- sum proc
- cumsum proc для варианта in-place
Пример:
let a = [1, 2, 3, 4] doAssert cumsummed(a) == @[1, 3, 6, 10]
Исходный код Изменить proc cumsum[T](x: var openArray[T])
-
Преобразует
xin-place (должна быть объявлена какvar) в её кумулятивное (префиксное) суммирование.См. также:
- sum proc
- cumsummed proc для варианта, возвращающего последовательность cumsum
Пример:
var a = [1, 2, 3, 4] cumsum(a) doAssert a == @[1, 3, 6, 10]
Исходный код Изменить proc sqrt(x: float32): float32 {...}{.importc: "sqrtf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc sqrt(x: float64): float64 {...}{.importc: "sqrt", header: "<math.h>", noSideEffect.}-
Вычисляет квадратный корень из
x.См. также:
- cbrt proc для кубического корня
echo sqrt(4.0) ## 2.0 echo sqrt(1.44) ## 1.2 echo sqrt(-4.0) ## nan
Исходный код Изменить proc cbrt(x: float32): float32 {...}{.importc: "cbrtf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc cbrt(x: float64): float64 {...}{.importc: "cbrt", header: "<math.h>", noSideEffect.}-
Вычисляет кубический корень из
x.См. также:
- sqrt proc для квадратного корня
echo cbrt(8.0) ## 2.0 echo cbrt(2.197) ## 1.3 echo cbrt(-27.0) ## -3.0
Исходный код Изменить proc ln(x: float32): float32 {...}{.importc: "logf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc ln(x: float64): float64 {...}{.importc: "log", header: "<math.h>", noSideEffect.}-
Вычисляет натуральный логарифм
x.См. также:
echo ln(exp(4.0)) ## 4.0 echo ln(1.0)) ## 0.0 echo ln(0.0) ## -inf echo ln(-7.0) ## nan
Исходный код Изменить proc log[T: SomeFloat](x, base: T): T {...}{.noSideEffect.}-
Вычисляет логарифм
xпо основаниюbase.См. также:
echo log(9.0, 3.0) ## 2.0 echo log(32.0, 2.0) ## 5.0 echo log(0.0, 2.0) ## -inf echo log(-7.0, 4.0) ## nan echo log(8.0, -2.0) ## nan
Исходный код Изменить proc log10(x: float32): float32 {...}{.importc: "log10f", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc log10(x: float64): float64 {...}{.importc: "log10", header: "<math.h>", noSideEffect.}-
Вычисляет десятичный логарифм (основание 10)
x.См. также:
echo log10(100.0) ## 2.0 echo log10(0.0) ## nan echo log10(-100.0) ## -inf
Исходный код Изменить proc exp(x: float32): float32 {...}{.importc: "expf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc exp(x: float64): float64 {...}{.importc: "exp", header: "<math.h>", noSideEffect.}-
Вычисляет экспоненциальную функцию от
x(e^x).См. также:
echo exp(1.0) ## 2.718281828459045 echo ln(exp(4.0)) ## 4.0 echo exp(0.0) ## 1.0 echo exp(-1.0) ## 0.3678794411714423
Исходный код Изменить proc sin(x: float32): float32 {...}{.importc: "sinf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc sin(x: float64): float64 {...}{.importc: "sin", header: "<math.h>", noSideEffect.}-
Вычисляет синус от
x.См. также:
echo sin(PI / 6) ## 0.4999999999999999 echo sin(degToRad(90.0)) ## 1.0
Исходный код Изменить proc cos(x: float32): float32 {...}{.importc: "cosf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc cos(x: float64): float64 {...}{.importc: "cos", header: "<math.h>", noSideEffect.}-
Вычисляет косинус от
x.См. также:
echo cos(2 * PI) ## 1.0 echo cos(degToRad(60.0)) ## 0.5000000000000001
Исходный код Изменить proc tan(x: float32): float32 {...}{.importc: "tanf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc tan(x: float64): float64 {...}{.importc: "tan", header: "<math.h>", noSideEffect.}
-
Вычисляет тангенс от
x.См. также:
echo tan(degToRad(45.0)) ## 0.9999999999999999 echo tan(PI / 4) ## 0.9999999999999999
Исходный код Изменить proc sinh(x: float32): float32 {...}{.importc: "sinhf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc sinh(x: float64): float64 {...}{.importc: "sinh", header: "<math.h>", noSideEffect.}-
Вычисляет гиперболический синус от
x.См. также:
echo sinh(0.0) ## 0.0 echo sinh(1.0) ## 1.175201193643801 echo sinh(degToRad(90.0)) ## 2.301298902307295
Исходный код Изменить proc cosh(x: float32): float32 {...}{.importc: "coshf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc cosh(x: float64): float64 {...}{.importc: "cosh", header: "<math.h>", noSideEffect.}-
Вычисляет гиперболический косинус от
x.См. также:
echo cosh(0.0) ## 1.0 echo cosh(1.0) ## 1.543080634815244 echo cosh(degToRad(90.0)) ## 2.509178478658057
Исходный код Изменить proc tanh(x: float32): float32 {...}{.importc: "tanhf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc tanh(x: float64): float64 {...}{.importc: "tanh", header: "<math.h>", noSideEffect.}-
Вычисляет гиперболический тангенс от
x.См. также:
echo tanh(0.0) ## 0.0 echo tanh(1.0) ## 0.7615941559557649 echo tanh(degToRad(90.0)) ## 0.9171523356672744
Исходный код Изменить proc arccos(x: float32): float32 {...}{.importc: "acosf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc arccos(x: float64): float64 {...}{.importc: "acos", header: "<math.h>", noSideEffect.}-
Вычисляет арккосинус от
x.См. также:
echo radToDeg(arccos(0.0)) ## 90.0 echo radToDeg(arccos(1.0)) ## 0.0
Исходный код Изменить proc arcsin(x: float32): float32 {...}{.importc: "asinf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc arcsin(x: float64): float64 {...}{.importc: "asin", header: "<math.h>", noSideEffect.}-
Вычисляет арксинус от
x.См. также:
echo radToDeg(arcsin(0.0)) ## 0.0 echo radToDeg(arcsin(1.0)) ## 90.0
Исходный код Изменить proc arctan(x: float32): float32 {...}{.importc: "atanf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc arctan(x: float64): float64 {...}{.importc: "atan", header: "<math.h>", noSideEffect.}-
Вычисляет арктангенс от
x.См. также:
echo arctan(1.0) ## 0.7853981633974483 echo radToDeg(arctan(1.0)) ## 45.0
Исходный код Изменить proc arctan2(y, x: float32): float32 {...}{.importc: "atan2f", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc arctan2(y, x: float64): float64 {...}{.importc: "atan2", header: "<math.h>", noSideEffect.}-
Вычисляет арктангенс от
y/x.Возвращает корректные результаты даже при значениях угла, близких к pi/2 или -pi/2 (
xблизко к 0).См. также:
echo arctan2(1.0, 0.0) ## 1.570796326794897 echo radToDeg(arctan2(1.0, 0.0)) ## 90.0
Исходный код Изменить proc arcsinh(x: float32): float32 {...}{.importc: "asinhf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc arcsinh(x: float64): float64 {...}{.importc: "asinh", header: "<math.h>", noSideEffect.}- Вычисляет обратный гиперболический синус от
x. Исходный код Изменить proc arccosh(x: float32): float32 {...}{.importc: "acoshf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc arccosh(x: float64): float64 {...}{.importc: "acosh", header: "<math.h>", noSideEffect.}- Вычисляет обратный гиперболический косинус от
x. Исходный код Изменить proc arctanh(x: float32): float32 {...}{.importc: "atanhf", header: "<math.h>", noSideEffect.}- Исходный код Изменить
proc arctanh(x: float64): float64 {...}{.importc: "atanh", header: "<math.h>", noSideEffect.}- Вычисляет обратный гиперболический тангенс от
x. Исходный код Изменить proc cot[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет котангенс от
x(1 / tan(x)). Исходный код Изменить proc sec[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет секанс от
x(1 / cos(x)). Исходный код Изменить proc csc[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет косеканс от
x(1 / sin(x)). Исходный код Изменить proc coth[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет гиперболический котангенс от
x(1 / tanh(x)). Исходный код Изменить proc sech[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет гиперболический секанс от
x(1 / cosh(x)). Исходный код Изменить proc csch[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет гиперболический косеканс от
x(1 / sinh(x)). Исходный код Изменить proc arccot[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет обратный котангенс от
x. Исходный код Изменить proc arcsec[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет обратный секанс от
x. Исходный код Изменить proc arccsc[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет обратный косеканс от
x. Исходный код Изменить proc arccoth[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет обратный гиперболический котангенс от
x. Исходный код Изменить proc arcsech[T: float32 | float64](x: T): T {...}{.noSideEffect.}
- Вычисляет обратную гиперболическую секанс
x. Исходный код Редактировать proc arccsch[T: float32 | float64](x: T): T {...}{.noSideEffect.}- Вычисляет обратную гиперболическую косеканс
x. Исходный код Редактировать proc hypot(x, y: float32): float32 {...}{.importc: "hypotf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc hypot(x, y: float64): float64 {...}{.importc: "hypot", header: "<math.h>", noSideEffect.}- Вычисляет гипотенузу прямоугольного треугольника с
xиyв качестве основания и высоты. Эквивалентноsqrt(x*x + y*y).echo hypot(4.0, 3.0) ## 5.0
Исходный код Редактировать proc pow(x, y: float32): float32 {...}{.importc: "powf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc pow(x, y: float64): float64 {...}{.importc: "pow", header: "<math.h>", noSideEffect.}-
Вычисляет x в степени y.
Для вычисления степени целых чисел (например, 26) используйте ^ proc.
См. также:
echo pow(100, 1.5) ## 1000.0 echo pow(16.0, 0.5) ## 4.0
Исходный код Редактировать proc erf(x: float32): float32 {...}{.importc: "erff", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc erf(x: float64): float64 {...}{.importc: "erf", header: "<math.h>", noSideEffect.}-
Вычисляет функцию ошибки для
x.Примечание: Не доступно для JS бэкенда.
Исходный код Редактировать proc erfc(x: float32): float32 {...}{.importc: "erfcf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc erfc(x: float64): float64 {...}{.importc: "erfc", header: "<math.h>", noSideEffect.}-
Вычисляет дополнительную функцию ошибки для
x.Примечание: Не доступно для JS бэкенда.
Исходный код Редактировать proc gamma(x: float32): float32 {...}{.importc: "tgammaf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc gamma(x: float64): float64 {...}{.importc: "tgamma", header: "<math.h>", noSideEffect.}-
Вычисляет функцию гамма для
x.Примечание: Не доступно для JS бэкенда.
См. также:
- lgamma proc для натурального логарифма функции гамма
echo gamma(1.0) # 1.0 echo gamma(4.0) # 6.0 echo gamma(11.0) # 3628800.0 echo gamma(-1.0) # nan
Исходный код Редактировать proc lgamma(x: float32): float32 {...}{.importc: "lgammaf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc lgamma(x: float64): float64 {...}{.importc: "lgamma", header: "<math.h>", noSideEffect.}-
Вычисляет натуральный логарифм функции гамма для
x.Примечание: Не доступно для JS бэкенда.
См. также:
- gamma proc для функции гамма
echo lgamma(1.0) # 1.0 echo lgamma(4.0) # 1.791759469228055 echo lgamma(11.0) # 15.10441257307552 echo lgamma(-1.0) # inf
Исходный код Редактировать proc floor(x: float32): float32 {...}{.importc: "floorf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc floor(x: float64): float64 {...}{.importc: "floor", header: "<math.h>", noSideEffect.}-
Вычисляет функцию floor (т.е., наибольшее целое число, не большее чем
x).См. также:
echo floor(2.1) ## 2.0 echo floor(2.9) ## 2.0 echo floor(-3.5) ## -4.0
Исходный код Редактировать proc ceil(x: float32): float32 {...}{.importc: "ceilf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc ceil(x: float64): float64 {...}{.importc: "ceil", header: "<math.h>", noSideEffect.}-
Вычисляет функцию ceiling (т.е., наименьшее целое число, не меньшее чем
x).См. также:
echo ceil(2.1) ## 3.0 echo ceil(2.9) ## 3.0 echo ceil(-2.1) ## -2.0
Исходный код Редактировать proc round(x: float32): float32 {...}{.importc: "roundf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc round(x: float64): float64 {...}{.importc: "round", header: "<math.h>", noSideEffect.}-
Округляет число с плавающей точкой до нуля знаков после запятой.
Используется внутри round proc, когда заданное число знаков после запятой равно 0.
См. также:
- round proc для округления до заданного числа знаков после запятой
- floor proc
- ceil proc
- trunc proc
echo round(3.4) ## 3.0 echo round(3.5) ## 4.0 echo round(4.5) ## 5.0
Исходный код Редактировать proc trunc(x: float32): float32 {...}{.importc: "truncf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc trunc(x: float64): float64 {...}{.importc: "trunc", header: "<math.h>", noSideEffect.}-
Отбрасывает
xпосле десятичной точки.См. также:
echo trunc(PI) # 3.0 echo trunc(-1.85) # -1.0
Исходный код Редактировать proc `mod`(x, y: float32): float32 {...}{.importc: "fmodf", header: "<math.h>", noSideEffect.}- Исходный код Редактировать
proc `mod`(x, y: float64): float64 {...}{.importc: "fmod", header: "<math.h>", noSideEffect.}-
Вычисляет операцию modulo для чисел с плавающей точкой (остаток от деления
xнаy).См. также:
- floorMod proc для поведения оператора % в Python
( 6.5 mod 2.5) == 1.5 (-6.5 mod 2.5) == -1.5 ( 6.5 mod -2.5) == 1.5 (-6.5 mod -2.5) == -1.5
Исходный код Редактировать proc round[T: float32 | float64](x: T; places: int): T {...}{.noSideEffect.}-
Десятичное округление двоичного числа с плавающей точкой.
Эта функция НЕ надёжна. Числа с плавающей точкой не могут точно хранить нецелые десятичные значения. Если
placesравно 0 (или опущено), округляется до ближайшего целого значения по обычным математическим правилам округления (например,round(54.5) -> 55.0). Еслиplacesбольше 0, округляется до заданного числа знаков после запятой, например,round(54.346, 2) -> 54.350000000000001421…. Еслиplacesотрицательно, округляется до левой части десятичной точки, например,round(537.345, -1) -> 540.0echo round(PI, 2) ## 3.14 echo round(PI, 4) ## 3.1416
Исходный код Редактировать proc floorDiv[T: SomeInteger](x, y: T): T {...}{.noSideEffect.}-
Деление по наименьшему целому определяется как
floor(x / y).Это отличается от оператора system.div, который определяется как
trunc(x / y). То есть,divокругляется к0, аfloorDivокругляется вниз.См. также:
- system.div proc для целочисленного деления
- floorMod proc для поведения оператора % в Python
echo floorDiv( 13, 3) # 4 echo floorDiv(-13, 3) # -5 echo floorDiv( 13, -3) # -5 echo floorDiv(-13, -3) # 4
Исходный код Редактировать proc floorMod[T: SomeNumber](x, y: T): T {...}{.noSideEffect.}-
Модуль по наименьшему целому концептуально определяется как
x - (floorDiv(x, y) * y).Эта процедура ведет себя так же, как оператор % в Python.
См. также:
echo floorMod( 13, 3) # 1 echo floorMod(-13, 3) # 2 echo floorMod( 13, -3) # -2 echo floorMod(-13, -3) # -1
Исходный код Редактировать proc c_frexp(x: float32; exponent: var int32): float32 {...}{.importc: "frexp", header: "<math.h>", noSideEffect.}
- Источник Изменить
proc c_frexp(x: float64; exponent: var int32): float64 {...}{.importc: "frexp", header: "<math.h>", noSideEffect.}- Источник Изменить
proc frexp[T, U](x: T; exponent: var U): T {...}{.noSideEffect.}-
Разделить число на мантиссу и порядок.
frexpвычисляет мантиссу m (вещественное число, большее или равное 0,5 и меньшее 1) и целое значение n, такое чтоx(исходное вещественное значение) равноm * 2**n. frexp сохраняет n вexponentи возвращает m.Пример:
var x: int doAssert frexp(5.0, x) == 0.625 doAssert x == 3
Источник Изменить proc log2(x: float32): float32 {...}{.importc: "log2f", header: "<math.h>", noSideEffect.}- Источник Изменить
proc log2(x: float64): float64 {...}{.importc: "log2", header: "<math.h>", noSideEffect.}-
Вычисляет двоичный логарифм (основание 2) от
x.См. также:
echo log2(8.0) # 3.0 echo log2(1.0) # 0.0 echo log2(0.0) # -inf echo log2(-2.0) # nan
Источник Изменить proc splitDecimal[T: float32 | float64](x: T): tuple[intpart: T, floatpart: T] {...}{. noSideEffect.}-
Разбивает
xна целую и дробную части.Возвращает кортеж, содержащий
intpartиfloatpartсоответственно, представляющие целую и дробную части.Обе части имеют тот же знак, что и
x. Аналогично функцииmodfв C.Пример:
doAssert splitDecimal(5.25) == (intpart: 5.0, floatpart: 0.25) doAssert splitDecimal(-2.73) == (intpart: -2.0, floatpart: -0.73)
Источник Изменить proc degToRad[T: float32 | float64](d: T): T {...}{.inline.}-
Преобразовать из градусов в радианы.
См. также:
Пример:
doAssert degToRad(180.0) == 3.141592653589793
Источник Изменить proc radToDeg[T: float32 | float64](d: T): T {...}{.inline.}-
Преобразовать из радиан в градусы.
См. также:
Пример:
doAssert radToDeg(2 * PI) == 360.0
Источник Изменить proc sgn[T: SomeNumber](x: T): int {...}{.inline.}-
Функция знака.
Возвращает:
-
-1для отрицательных чисел иNegInf, -
1для положительных чисел иInf, -
0для положительного нуля, отрицательного нуля иNaN
Пример:
doAssert sgn(5) == 1 doAssert sgn(0) == 0 doAssert sgn(-4.1) == -1
Источник Изменить -
proc `^`[T: SomeNumber](x: T; y: Natural): T
-
Вычисляет
xв степениy.Экспонента
yдолжна быть неотрицательной, используйте pow процедуру для отрицательных показателей.См. также:
- pow процедура для отрицательных показателей или вещественных чисел
- sqrt процедура
- cbrt процедура
Пример:
assert -3.0^0 == 1.0 assert -3^1 == -3 assert -3^2 == 9 assert -3.0^3 == -27.0 assert -3.0^4 == 81.0
Источник Изменить proc gcd[T](x, y: T): T
-
Вычисляет наибольший общий (положительный) делитель
xиy.Обратите внимание, что для вещественных чисел результат не всегда может быть интерпретирован как "наибольший десятичный
zтакой, чтоz*N == x and z*M == y, где N и M - положительные целые числа."См. также:
- gcd процедура для целочисленной версии
- lcm процедура
Пример:
doAssert gcd(13.5, 9.0) == 4.5
Источник Изменить proc gcd(x, y: SomeInteger): SomeInteger
-
Вычисляет наибольший общий (положительный) делитель
xиy, используя алгоритм бинарного НОД (также известный как алгоритм Штейна).См. также:
- gcd процедура для вещественной версии
- lcm процедура
Пример:
doAssert gcd(12, 8) == 4 doAssert gcd(17, 63) == 1
Источник Изменить proc gcd[T](x: openArray[T]): T
-
Вычисляет наибольший общий (положительный) делитель элементов
x.См. также:
- gcd процедура для целочисленной версии
Пример:
doAssert gcd(@[13.5, 9.0]) == 4.5
Источник Изменить proc lcm[T](x, y: T): T
-
Вычисляет наименьшее общее кратное
xиy.См. также:
Пример:
doAssert lcm(24, 30) == 120 doAssert lcm(13, 39) == 39
Источник Изменить proc lcm[T](x: openArray[T]): T
-
Вычисляет наименьшее общее кратное элементов
x.См. также:
- gcd процедура для целочисленной версии
Пример:
doAssert lcm(@[24, 30]) == 120
Источник Изменить
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/math.html