Математические функции в Julia

Julia предоставляет набор эффективных, переносимых стандартных математических функций.


Числовое сравнение

В следующей таблице перечислены функции, используемые для числового сравнения:

Функция Проверить, выполняется ли следующее свойство
isequal(x, y) xиyСовпадают ли значение и тип в точности
isfinite(x) xЯвляется ли оно конечным числом
isinf(x) xЯвляется ли оно (положительной/отрицательной) бесконечностью
isnan(x) xЯвляется ли оноNaN

isequal считает значения NaN равными:

Пример

julia> isequal(NaN, NaN)
истина

julia> isequal([1 NaN], [1 NaN])
истина

julia> isequal(NaN, NaN32)
истина

isequal также можно использовать для различения нулей со знаком:

Пример

julia> -0.0 == 0.0
истина

julia> isequal(-0.0, 0.0)
false

Примеры других функций:

Пример

julia> isfinite(5)
истина

julia> isfinite(NaN32)
false

Функции округления

В следующей таблице перечислены функции округления, поддерживаемые Julia:

Функция Описание Тип возвращаемого значения
round(x) xОкругление до ближайшего целого typeof(x)
round(T, x) xОкругление до ближайшего целого T
floor(x) xв направлении-InfОкругление typeof(x)
floor(T, x) xв направлении-InfОкругление T
ceil(x) xв направлении+InfНаправленное округление typeof(x)
ceil(T, x) xв направлении+InfНаправленное округление T
trunc(x) xОкругление в сторону нуля typeof(x)
trunc(T, x) xОкругление в сторону нуля T

Пример

julia> round(3.8)
4.0
julia> round(Int, 3.8)
4
julia> floor(3.8)
3.0
julia> floor(Int, 3.8)
3
julia> ceil(3.8)
4.0
julia> ceil(Int, 3.8)
4
julia> trunc(3.8)
3.0
julia> trunc(Int, 3.8)
3

Функции деления

В следующей таблице перечислены функции деления, поддерживаемые в Julia:

Функция Описание
div(x,y), x÷y Усечённое деление: независимо от типа результат деления отбрасывает дробную часть, оставляя целую часть, а частное приближается к нулю.
fld(x,y) Деление с округлением вниз; частное в направлении-Infприближается
cld(x,y) Деление с округлением вверх; частное в направлении+Infприближается
rem(x,y) Остаток; удовлетворяетx == div(x,y)*y + rem(x,y); знак согласуется сxсогласованный
mod(x,y) По модулю; удовлетворяетx == fld(x,y)*y + mod(x,y); знак согласуется сyсогласованный
mod1(x,y) Смещение на 1mod; еслиy>0, затем вернутьr∈(0,y], еслиy<0, затемr∈[y,0)и удовлетворяетmod(r, y) == mod(x, y)
mod2pi(x) По модулю 2pi;0 <= mod2pi(x) < 2pi
divrem(x,y) Return(div(x,y),rem(x,y))
fldmod(x,y) Return(fld(x,y),mod(x,y))
gcd(x,y...) x, yНаибольший общий делитель , ...
lcm(x,y...) x, yНаименьшее общее кратное , ...

Пример

julia> div(11, 4)
2

julia> div(7, 4)
1

julia> fld(11, 4)
2

julia> fld(-5,3)
-2

julia> fld(7.5,3.3)
2.0

julia> cld(7.5,3.3)
3.0

julia> mod(5, 0:2)
2

julia> mod(3, 0:2)
0

julia> mod(8.9,2)
0.9000000000000004

julia> rem(8,4)
0

julia> rem(9,4)
1

julia> mod2pi(7*pi/5)
4.39822971502571

julia> divrem(8,3)
(2, 2)

julia> fldmod(12,4)
(3, 0)

julia> fldmod(13,4)
(3, 1)

julia> mod1(5,4)
1

julia> gcd(6,0)
6

julia> gcd(1//3,2//3)
1//3

julia> lcm(1//3,2//3)
2//3

Функции знака и абсолютного значения

В следующей таблице перечислены функции знака и абсолютного значения, поддерживаемые Julia:

Функция Описание
abs(x) xмодуль
abs2(x) xквадрат модуля
sign(x) представляетxзнак , возвращает -1, 0 или +1
signbit(x) указывает, является ли знаковый бит true или false
copysign(x,y) возвращает число, значение которого равноxмодуль , а знак согласуется сyсогласованный
flipsign(x,y) возвращает число, значение которого равноxмодуль , а знак согласуется сx*yсогласованный

Пример

julia> abs(-7)
7

julia> abs(5+3im)
5.830951894845301

julia> abs2(-7)
49

julia> abs2(5+3im)
34

julia> copysign(5,-10)
-5

julia> copysign(-5,10)
5

julia> sign(5)
1

julia> sign(-5)
-1

julia> signbit(-5)
истина

julia> signbit(5)
false

julia> flipsign(5,10)
5

julia> flipsign(5,-10)
-5

Функции знака и абсолютного значения

В следующей таблице перечислены функции знака и абсолютного значения, поддерживаемые Julia:

Функция Описание
sqrt(x), √x xквадратный корень из
cbrt(x), ∛x xкубический корень из
hypot(x,y) когда длины катетов равныxиy, длина гипотенузы прямоугольного треугольника
exp(x) натуральная экспоненциальная функция в точкеxзначение в точке
expm1(x) Когдаxкогда близко к 0,exp(x)-1точное значение
ldexp(x,n) x*2^nэффективный алгоритм для ,nявляется целым числом
log(x) xнатуральный логарифм от
log(b,x) withbв качестве основанияxлогарифм от
log2(x) Основание 2xлогарифм от
log10(x) Основание 10xлогарифм от
log1p(x) Когдаxкогда близко к 0,log(1+x)точное значение
exponent(x) xдвоичная экспонента
significand(x) число с плавающей запятойxдвоичная значащая часть (то есть мантисса) от

Пример

julia> sqrt(49)
7.0

julia> sqrt(-49)
ОШИБКА: DomainError с -49.0:
sqrt будет только возвращать комплексный результат если вызван с комплексным аргументом. Попробуйте sqrt(Complex(x)).
Трассировка стека:
 [1] throw_complex_domainerror(::Symbol, ::Float64) в .\math.jl:33
 [2] sqrt в .\math.jl:573 [встроен]
 [3] sqrt(::Int64) в .\math.jl:599
 [4] область верхнего уровня в REPL[43]:1
 
julia> cbrt(8)
2.0

julia> cbrt(-8)
-2.0

julia> a = Int64(5)^10;

julia> hypot(a, a)
1.3810679320049757e7

julia> exp(5.0)
148.4131591025766

julia> expm1(10)
22025.465794806718

julia> expm1(1.0)
1.718281828459045

julia> ldexp(4.0, 2)
16.0

julia> log(5,2)
0.43067655807339306

julia> log(4,2)
0.5

julia> log(4)
1.3862943611198906

julia> log2(4)
2.0

julia> log10(4)
0.6020599913279624

julia> log1p(4)
1.6094379124341003

julia> log1p(-2)
ОШИБКА: DomainError с -2.0:
log1p только тогда вернёт комплексный результат, если вызвать его с комплексным аргументом. Попробуйте log1p(Complex(x)).
Трассировка стека:
 [1] throw_complex_domainerror(::Symbol, ::Float64) в .\math.jl:33
 [2] log1p(::Float64) в .\special\log.jl:356
 [3] log1p(::Int64) в .\special\log.jl:395
 [4] область верхнего уровня в REPL[65]:1
julia> exponent(6.8)
2

julia> significand(15.2)/10.2
0.18627450980392157

julia> significand(15.2)*8
15.2

Тригонометрические и гиперболические функции

Julia также предоставляет все стандартные тригонометрические и гиперболические функции:

sin    cos    tan    cot    sec    csc
sinh   cosh   tanh   coth   sech   csch
asin   acos   atan   acot   asec   acsc
asinh  acosh  atanh  acoth  asech  acsch
sinc   cosc

На рисунке ниже угол в радианах соответствует точке на единичной окружности, координаты которой определяют синус и косинус угла.

Пример

julia> pi
π = 3.1415926535897...

julia> sin(0)
0.0

julia> sin(pi/6)
0.49999999999999994

julia> sin(pi/4)
0.7071067811865475

julia> cos(0)
1.0

julia> cos(pi/6)
0.8660254037844387

julia> cos(pi/3)
0.5000000000000001

Все функции, приведённые выше, являются одноаргументными, но atan также может принимать два параметра, соответствующие традиционной функции atan2.

atan(y)
atan(y, x)

Вычислите арктангенс y или y/x соответственно.

Пример

julia> theta = 3pi/4
2.356194490192345

julia> x,y = (cos(theta), sin(theta))
(-0.7071067811865475, 0.7071067811865476)

julia> atan(y/x)
-0.7853981633974484

julia> atan(y, x)
2.356194490192345

Кроме того, sinpi(x) и cospi(x) используются для более точного вычисления sin(pi*x) и cos(pi*x) соответственно.

Чтобы вычислять тригонометрические функции в градусах, а не в радианах, используйте суффикс d. Например, sind(x) вычисляет синус x, где x — угол в градусах. Ниже приведён полный список тригонометрических функций для угловых переменных:

sind   cosd   tand   cotd   secd   cscd
asind  acosd  atand  acotd  asecd  acscd

Пример

julia> cos(56)
0.853220107722584

julia> cosd(56)
0.5591929034707468
Другие расширения