Математические функции в Julia
Julia предоставляет набор эффективных, переносимых стандартных математических функций.
Числовое сравнение
В следующей таблице перечислены функции, используемые для числового сравнения:
| Функция | Проверить, выполняется ли следующее свойство |
|---|---|
isequal(x, y) |
xиyСовпадают ли значение и тип в точности |
isfinite(x) |
xЯвляется ли оно конечным числом |
isinf(x) |
xЯвляется ли оно (положительной/отрицательной) бесконечностью |
isnan(x) |
xЯвляется ли оноNaN |
isequal считает значения NaN равными:
Пример
истина
julia> isequal([1 NaN], [1 NaN])
истина
julia> isequal(NaN, NaN32)
истина
isequal также можно использовать для различения нулей со знаком:
Пример
истина
julia> isequal(-0.0, 0.0)
false
Примеры других функций:
Пример
истина
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 |
Пример
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Наименьшее общее кратное , ... |
Пример
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согласованный |
Пример
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двоичная значащая часть (то есть мантисса) от |
Пример
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
На рисунке ниже угол в радианах соответствует точке на единичной окружности, координаты которой определяют синус и косинус угла.

Пример
π = 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 соответственно.
Пример
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
Пример
0.853220107722584
julia> cosd(56)
0.5591929034707468