Julia 数学関数
Julia は、効率的で移植性の高い標準数学関数を提供しています。
数値比較
以下の表に、数値比較に使用する関数を示します:
| 関数 | 以下の性質を満たすかどうかをテストする |
|---|---|
isequal(x, y) |
xとy値と型が完全に同じかどうか |
isfinite(x) |
x有限の数値であるかどうか |
isinf(x) |
x(正/負の)無限大であるかどうか |
isnan(x) |
xNaN であるかどうかNaN |
isequal は NaN 同士を等しいとみなします:
例
julia> isequal(NaN, NaN)
true
julia> isequal([1 NaN], [1 NaN])
true
julia> isequal(NaN, NaN32)
true
true
julia> isequal([1 NaN], [1 NaN])
true
julia> isequal(NaN, NaN32)
true
isequal は符号付きのゼロを区別するためにも使用できます:
例
julia> -0.0 == 0.0
true
julia> isequal(-0.0, 0.0)
false
true
julia> isequal(-0.0, 0.0)
false
その他の関数の例:
例
julia> isfinite(5)
true
julia> isfinite(NaN32)
false
true
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) |
x0 に向かって丸める |
typeof(x) |
trunc(T, x) |
x0 に向かって丸める |
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
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) |
1 だけオフセットしたmod;もしy>0ならば返すr∈(0,y]、もしy<0ならばr∈[y,0)かつ次を満たすmod(r, y) == mod(x, y) |
mod2pi(x) |
2π を法とする剰余。0 <= mod2pi(x) < 2pi |
divrem(x,y) |
返す(div(x,y),rem(x,y)) |
fldmod(x,y) |
返す(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
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)
true
julia> signbit(5)
false
julia> flipsign(5,10)
5
julia> flipsign(5,-10)
-5
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)
true
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) |
以 bを底とするxの対数 |
log2(x) |
2 を底とするxの対数 |
log10(x) |
10 を底とするxの対数 |
log1p(x) |
当 xが 0 に近いときのlog(1+x)の正確な値 |
exponent(x) |
xの二進指数 |
significand(x) |
浮動小数点数xの二進有効数(すなわち仮数) |
例
julia> sqrt(49)
7.0
julia> sqrt(-49)
ERROR: DomainError with -49.0:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at .\math.jl:33
[2] sqrt at .\math.jl:573 [inlined]
[3] sqrt(::Int64) at .\math.jl:599
[4] top-level scope at 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)
ERROR: DomainError with -2.0:
log1p will only return a complex result if called with a complex argument. Try log1p(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at .\math.jl:33
[2] log1p(::Float64) at .\special\log.jl:356
[3] log1p(::Int64) at .\special\log.jl:395
[4] top-level scope at REPL[65]:1
julia> exponent(6.8)
2
julia> significand(15.2)/10.2
0.18627450980392157
julia> significand(15.2)*8
15.2
7.0
julia> sqrt(-49)
ERROR: DomainError with -49.0:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at .\math.jl:33
[2] sqrt at .\math.jl:573 [inlined]
[3] sqrt(::Int64) at .\math.jl:599
[4] top-level scope at 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)
ERROR: DomainError with -2.0:
log1p will only return a complex result if called with a complex argument. Try log1p(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at .\math.jl:33
[2] log1p(::Float64) at .\special\log.jl:356
[3] log1p(::Int64) at .\special\log.jl:395
[4] top-level scope at 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
π = 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 は2つの引数を受け取って従来の 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
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(π*x) と cos(π*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
0.853220107722584
julia> cosd(56)
0.5591929034707468