数学
数学演算子
Base.:+ ── 関数
+(x, y...)
加算演算子です。x+y+z+... は、この関数を全ての値を引数として +(x, y, z, ...) と呼び出します。
例
julia> 1 + 20 + 4
25
julia> +(1, 20, 4)
25
Base.:^ ── メソッド
^(x, y)
べき乗演算子です。x が行列なら、行列のべき乗が計算されます。
x が Int リテラル (例えば x^2 の 2 や x^-3 の -3) のときの x^y という Julia コードはコンパイラによって Base.literal_pow(^, x, Val(y)) に変換されるので、指数の値に関するコンパイル時の特殊化が可能です。デフォルトのフォールバックとして Base.literal_pow(^, x, Val(y)) = ^(x,y) が用意されており、呼び出し側の名前空間で ^ が定義されていない限り通常は ^ == Base.^ となります。
julia> 3^5
243
julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1 2
3 4
julia> A^3
2×2 Array{Int64,2}:
37 54
81 118
Base.muladd ── 関数
Base.inv ── メソッド
inv(x)
x の乗法逆元を返します。x*inv(x) と inv(x)*x は (丸め誤差を無視すれば) 乗法単位元 one(x) に等しくなります。
数値型の x に対する inv(x) は one(x)/x と本質的に同じです。しかし他の型の x に対する inv(x) は one(x)/x より少しだけ高速なことがあります。
例
julia> inv(2)
0.5
julia> inv(1 + 2im)
0.2 - 0.4im
julia> inv(1 + 2im) * (1 + 2im)
1.0 + 0.0im
julia> inv(2//3)
3//2
inv(::Missing) は Julia 1.2 以降でサポートされます。
Base.div ── 関数
div(x, y)
÷(x, y)
ユークリッド除算の商です。つまり x/y を整数に切り捨てた値を計算します。
例
julia> 9 ÷ 4
2
julia> -5 ÷ 3
-1
julia> 5.0 ÷ 2
2.0
div(x, y, r::RoundingMode=RoundToZero)
ユークリッド除算の商です1。x/y を計算し、丸めモード r に従ってそれを整数に丸めます。言い換えると、途中で丸めを行わずに round(x/y,r) の値を計算します。
fld と cld も参照してください。この二つは div を特殊化した関数です。
例
julia> div(4, 3, RoundDown) # fld(4, 3) と同じ
1
julia> div(4, 3, RoundUp) # cld(4, 3) と同じ
2
julia> div(5, 2, RoundNearest)
2
julia> div(5, 2, RoundNearestTiesAway)
3
julia> div(-5, 2, RoundNearest)
-2
julia> div(-5, 2, RoundNearestTiesAway)
-3
julia> div(-5, 2, RoundNearestTiesUp)
-2
Base.mod ── 関数
mod(x::Integer, r::AbstractUnitRange)
n = length(r) に対して x ≡ y (mod n) が成り立つ r の要素 y を返します。つまり返り値は mod(x - first(r), n) + first(r) です。
mod1 も参照してください。
例
julia> mod(0, Base.OneTo(3))
3
julia> mod(3, 0:2)
0
このメソッドは Julia 1.3 以降でサポートされます。
mod(x, y)
rem(x, y, RoundDown)
モジュロ y における x の簡約です。言い換えると、x を y で床除算した後の余り x - y*fld(x,y) を途中で丸めずに計算した値です。
結果は y と同じ符号を持ち、abs(y) よりも小さい絶対値を持ちます (後述する例外もあります)。
浮動小数点数が絡むと正確な計算結果が返り値の型で表せない場合があり、そのような場合には丸め誤差が生じます。特に正確な結果が y に非常に近いと、丸められて y が返る場合があります。
julia> mod(8, 3)
2
julia> mod(9, 3)
0
julia> mod(8.9, 3)
2.9000000000000004
julia> mod(eps(), 3)
2.220446049250313e-16
julia> mod(-eps(), 3)
3.0
rem(x::Integer, T::Type{<:Integer}) -> T
mod(x::Integer, T::Type{<:Integer}) -> T
%(x::Integer, T::Type{<:Integer}) -> T
x ≡ y (mod n) を満たす y::T を計算します。ここで n は T 型で表現可能な整数の個数で、y は [typemin(T),typemax(T)] を満たす整数です。T が任意の整数を表せる (T == BigInt) なら、この操作は T 型への変換に対応します。
例
julia> 129 % Int8
-127
Base.rem ── 関数
rem(x, y)
%(x, y)
ユークリッド除算の余りです。x と同じ符号で絶対値が abs(y) より小さい値を返します。返り値は必ず正確です。
例
julia> x = 15; y = 4;
julia> x % y
3
julia> x == div(x, y) * y + rem(x, y)
true
rem(x, y, r::RoundingMode=RoundToZero)
x を y で割ったときの余りを計算します (商は整数)。商は丸めモード r に従って丸められます。言い換えると、途中で丸めを行わずに次の値を計算します:
x - y*round(x/y,r)
-
r == RoundNearestだと、返り値の範囲は \([-|y|/2, |y|/2]\) となります。このとき返り値は必ず正確です (参照:RoundNearest)。 -
r == RoundToZero(デフォルト) だと、返り値の範囲はxが正のとき \([0, |y|)\) となり、それ以外のとき \((-|y|, 0]\) となります。このとき返り値は必ず正確です (参照:RoundToZero)。 -
r == RoundDownだと、返り値の範囲はyが正なら \([0, y)\) となり、それ以外のとき \((y, 0]\) となります。xとyが異なる符号を持ち、かつabs(x) < abs(y)が成り立つとき返り値は正確でなくなる可能性があります (参照:RoundDown)。 -
r == RoundUpだと、返り値の範囲はyが正なら \((-y,0]\) となり、それ以外のとき \([0,-y)\) となります。xとyが同じ符号を持ち、かつabs(x) < abs(y)が成り立つとき返り値は正確でなくなる可能性があります (参照:RoundUp)。
Base.Math.rem2pi ── 関数
rem2pi(x, r::RoundingMode)
x を 2π で割った余りを計算します (商は整数)。商は丸めモード r に従います。言い換えると、途中で丸めを行わずに次の値を計算します:
x - 2π*round(x/(2π),r)
rem2pi は内部で \(2π\) の高精度な近似を使うので、rem(x,2π,r) よりも正確な値を計算できます。
-
r == RoundNearestだと、返り値の範囲は \([-π, π]\) となります。一般にこの丸めモードが最も正確な値を与えます (参照:RoundNearest)。 -
r == RoundToZeroだと、返り値の範囲はxが正のとき \([0, 2π]\) となり、それ以外のとき \([-2π, 0]\) となります (参照:RoundToZero)。 -
r == RoundDownだと、返り値の範囲 \([0, 2π]\) となります (参照:RoundDown)。 -
r == RoundUpだと、返り値の範囲は \([-2π, 0]\) となります (参照:RoundUp)。
例
julia> rem2pi(7pi/4, RoundNearest)
-0.7853981633974485
julia> rem2pi(7pi/4, RoundDown)
5.497787143782138
Base.Math.mod2pi ── 関数
mod2pi(x)
x を 2π で割った余りを返します。返り値の範囲は \([0,2π)\) です。
mod2pi 関数は数値的に正確な \(2π\) による除算で生じる余りの浮動小数点数表現を計算します。そのため、この関数は mod(x,2π) と正確に同じではありません。mod(x,2π) が計算するのは浮動小数点数 2π で x を割った余りであるためです。
入力された値のフォーマットによっては、\(2π\) に一番近い表現可能な値が \(2π\) より小さい可能性があります。例えば式 mod2pi(2π) は 0 を返しませんが、これは途中で計算される 2*π が Float64 であり、2*Float64(π) < 2*big(π) が成り立つためです。振る舞いを細かく調整するには rem2pi を使ってください。
例
julia> mod2pi(9*pi/4)
0.7853981633974481
Base.divrem ── 関数
divrem(x, y, r::RoundingMode=RoundToZero)
ユークリッド除算における商と余りです。(div(x,y,r), rem(x,y,r)) と等価です。また r にデフォルトの値を使うとすれば (x÷y, x%y) とも等価になります。
例
julia> divrem(3,7)
(0, 3)
julia> divrem(7,3)
(2, 1)
Base.fldmod ── 関数
fldmod(x, y)
床除算の商と余りを計算します。divrem(x, y, RoundDown) を使いやすくしたラッパーであり、(fld(x,y), mod(x,y)) と等価です。
Base.fldmod1 ── 関数
Base.rationalize ── 関数
Base.numerator ── 関数
Base.denominator ── 関数
Base.:<< ── 関数
<<(x, n)
左ビットシフト演算子 x << n です。n >= 0 に対する返り値は x を左に n ビットだけシフトし、新しくできる空間を 0 で埋めた値です。x << n は x * 2^n と等価です。n < 0 に対する x << n は x >> -n と等価です。
例
julia> Int8(3) << 2
12
julia> bitstring(Int8(3))
"00000011"
julia> bitstring(Int8(12))
"00001100"
<<(B::BitVector, n) -> BitVector
左ビットシフト演算子 B << n です。n >= 0 に対する返り値は B の要素を n 要素だけ後ろにシフトし、新しくできる空間を false で埋めた値です。n < 0 のときは要素が前方にシフトされます。B << n は B >> -n と等価です。
例
julia> B = BitVector([true, false, true, false, false])
5-element BitArray{1}:
1
0
1
0
0
julia> B << 1
5-element BitArray{1}:
0
1
0
0
0
julia> B << -1
5-element BitArray{1}:
0
1
0
1
0
Base.:>> ── 関数
>>(x, n)
右ビットシフト演算子 x >> n です。n >= 0 に対する返り値は x を右に n ビットだけシフトし、新しくできる空間を x >= 0 なら 0 で、x < 0 なら 1 で埋めた値です。このとき x の符号は保存されます。x >> n は fld(x, 2^n) と等価です。n < 0 のときは x << -n とも等価になります。
例
julia> Int8(13) >> 2
3
julia> bitstring(Int8(13))
"00001101"
julia> bitstring(Int8(3))
"00000011"
julia> Int8(-14) >> 2
-4
julia> bitstring(Int8(-14))
"11110010"
julia> bitstring(Int8(-4))
"11111100"
>>(B::BitVector, n) -> BitVector
右ビットシフト演算子 B >> n です。n >= 0 に対する返り値は B の要素を n 要素だけ前方にシフトしたものです。n < 0 のときは要素が後方にシフトされます。B >> n は B << -n と等価です。
例
julia> B = BitVector([true, false, true, false, false])
5-element BitArray{1}:
1
0
1
0
0
julia> B >> 1
5-element BitArray{1}:
0
1
0
1
0
julia> B >> -1
5-element BitArray{1}:
0
1
0
0
0
Base.:>>> ── 関数
>>>(x, n)
符号無し右ビットシフト演算子 x >>> n です。n >= 0 に対する返り値は x を右に n ビットシフトし、新しくできる空間を 0 で埋めた値です。n < 0 のとき x << -n と等価になります。
Unsigned 整数型に対する x >>> n は x >> n と等価です。Signed 整数型に対する x >>> n は signed(unsigned(x) >> n) と等価になります。
例
julia> Int8(-14) >>> 2
60
julia> bitstring(Int8(-14))
"11110010"
julia> bitstring(Int8(60))
"00111100"
Base.bitrotate ── 関数
bitrotate(x::Base.BitInteger, k::Integer)
bitrotate(x, k) はビット単位の回転を実装します。x を構成するビットを左に向かって k 度回転させた値が返り値です。k が負だと左方向への回転が行われます。
この関数は Julia 1.5 以降でサポートされます。
julia> bitrotate(UInt8(114), 2)
0xc9
julia> bitstring(bitrotate(0b01110010, 2))
"11001001"
julia> bitstring(bitrotate(0b01110010, -2))
"10011100"
julia> bitstring(bitrotate(0b01110010, 8))
"01110010"
Base.:: ── 関数
(:)(start, [step], stop)
区間演算子です。a:b は a から b までのステップサイズ 1 の区間 (UnitRange) を構築し、a:s:b は a から b までのステップサイズ s の区間 (StepRange) を構築します。
添え字アクセスで : を使うと次元全体を選択できます。また : を :hello のように使うと Symbol リテラルとなります。
(:)(I::CartesianIndex, J::CartesianIndex)
二つの CartesianIndex から CartesianIndices を構築します。
このメソッドは Julia 1.1 以降でサポートされます。
例
julia> I = CartesianIndex(2,1);
julia> J = CartesianIndex(3,3);
julia> I:J
2×3 CartesianIndices{2,Tuple{UnitRange{Int64},UnitRange{Int64}}}:
CartesianIndex(2, 1) CartesianIndex(2, 2) CartesianIndex(2, 3)
CartesianIndex(3, 1) CartesianIndex(3, 2) CartesianIndex(3, 3)
Base.range ── 関数
range(start[, stop]; length, stop, step=1)
開始値を受け取り、長さ length あるいは終了値 stop の区間を構築します。step は省略可能であり、デフォルトは 1 です (この値を使うと UnitRange が構築されます)。
length と stop が与えられ step が与えられないと、ステップサイズが区間を length 等分した値として自動的に計算されます。
step と stop が与えられ length が与えられないと、隣り合う要素がちょうど step だけ離れるように区間全体の長さが自動的に計算されます。
途中の値を有理数として計算する特別な処理が行われます。これによって生じるオーバーヘッドを避けるには LinRange コンストラクタを使ってください。
stop は位置引数とキーワード引数のどちらでも指定できます。
位置引数としての stop は Julia 1.1 以降でサポートされます。
例
julia> range(1, length=100)
1:100
julia> range(1, stop=100)
1:100
julia> range(1, step=5, length=100)
1:5:496
julia> range(1, step=5, stop=100)
1:5:96
julia> range(1, 10, length=101)
1.0:0.09:10.0
julia> range(1, 100, step=5)
1:5:96
Base.OneTo ── 型
Base.StepRangeLen ── 型
StepRangeLen{T,R,S}(ref::R, step::S, len, [offset=1]) where {T,R,S}
StepRangeLen( ref::R, step::S, len, [offset=1]) where { R,S}
r[i] が T 型の値を生成するような区間です (二つ目の形式を使うと、T は自動的に推論されます)。参照される値 ref・ステップサイズ step・長さ len をパラメータとして持ちます。デフォルトでは ref は開始値 r[1] ですが、r[offset] の値を与えることもできます (1 <= offset <= len)。R や S に TwicePrecision を使うと丸め誤差のない区間が実装できます。
Base.:== ── 関数
==(x, y)
汎用的な等価演算子です。=== にフォールバックします。インスタンスが表す抽象的な値の間に等価性が定義される全ての型に対して実装されるべき関数です。例えば数値型に対する == は引数が表す数値として比較され、型は無視されます。また文字列は文字の列として比較され、エンコーディングは無視されます。コレクションに対する == は一般に要素に対して再帰的に比較を行いますが、他のプロパティ (配列の形状など) が考慮されることもあります。
浮動小数点数に対するこの演算子は IEEE の意味論に従います: 0.0 == -0.0 および NaN != NaN が成り立ちます。
返り値は Bool 型ですが、三値論理に従いオペランドの少なくとも一方が missing のときは missing となります。コレクションに対しては、オペランドの少なくとも一方が missing を含み、missing 以外の要素が全て等しいときに限って missing が返ります。どんなときでも Bool 型の結果が必要なら、isequal または === を使ってください。
実装
新しい数値型に対しては、その型同士の == を実装するべきです。他の型との比較が可能な場合には昇格規則を通して処理してください。
isequal は == にフォールバックします。そのため == の新しいメソッドは Dict がキーを比較するときに利用されます。そのため、もし独自の型が辞書のキーとして使われる予定なら、その型は hash も実装するべきです。
==(x)
引数が x と等しいかどうかを == で判定する関数を作成します。つまり、この関数は y -> y == x と等価です。
返り値の関数は Base.Fix2{typeof(==)} という型を持ちます。この型に対して特殊化されたメソッドを実装することもできます。
==(a::AbstractString, b::AbstractString) -> Bool
二つの文字列が等しいかどうかを文字ごと (正確には符号位置ごと) に比較して判定します。
例
julia> "abc" == "abc"
true
julia> "abc" == "αβγ"
false
Base.:<= ── 関数
<=(x, y)
≤(x,y)
小なり等号演算子です。(x < y) | (x == y) にフォールバックします。
例
julia> 'a' <= 'b'
true
julia> 7 ≤ 7 ≤ 9
true
julia> "abc" ≤ "abc"
true
julia> 5 <= 3
false
Base.:>= ── 関数
>=(x, y)
≥(x,y)
大なり等号演算子です。y <= x にフォールバックします。
例
julia> 'a' >= 'b'
false
julia> 7 ≥ 7 ≥ 3
true
julia> "abc" ≥ "abc"
true
julia> 5 >= 3
true
Base.cmp ── 関数
cmp(x,y)
x が y より小さければ -1 を、等しければ 0 を、大きければ 1 を返します。isless が定義する全順序を利用します。
例
julia> cmp(1, 2)
-1
julia> cmp(2, 1)
1
julia> cmp(2+im, 3-im)
ERROR: MethodError: no method matching isless(::Complex{Int64}, ::Complex{Int64})
[...]
cmp(a::AbstractString, b::AbstractString) -> Int
二つの文字列の比較です。両方の文字列が同じ長さを持ち、それぞれの添え字における文字が全て同じなら 0 を返し、a が b の接頭語のとき、およびアルファベット順で a が b より前にあるとき -1 を返し、b が a の接頭語のとき、およびアルファベット順で b が a より前にあるとき 1 を返します (正確に言うと、Unicode 符号位置の辞書式順序が使われます)。
例
julia> cmp("abc", "abc")
0
julia> cmp("ab", "abc")
-1
julia> cmp("abc", "ab")
1
julia> cmp("ab", "ac")
-1
julia> cmp("ac", "ab")
1
julia> cmp("α", "a")
1
julia> cmp("b", "β")
-1
Base.xor ── 関数
xor(x, y)
⊻(x, y)
ビット単位の排他論理和演算です。三値論理を実装するので、オペランドの片方が missing なら missing を返します。
中置記法 a ⊻ b は xor(a,b) と等価です。REPL で ⊻ は \xor あるいは \veebar からのタブ補間で入力できます。
例
julia> xor(true, false)
true
julia> xor(true, true)
false
julia> xor(true, missing)
missing
julia> false ⊻ false
false
julia> [true; true; false] .⊻ [true; false; false]
3-element BitArray{1}:
0
1
0
Base.:! ── 関数
!(x)
真偽値に対する否定演算です。三値論理を実装するので、x が missing なら missing を返します。
例
julia> !true
false
julia> !false
true
julia> !missing
missing
julia> .![true false true]
1×3 BitArray{2}:
0 1 0
!f::Function
述語関数に対する否定演算です。! の引数が関数だと、f の否定を計算する関数を返します。
例
julia> str = "∀ ε > 0, ∃ δ > 0: |x-y| < δ ⇒ |f(x)-f(y)| < ε"
"∀ ε > 0, ∃ δ > 0: |x-y| < δ ⇒ |f(x)-f(y)| < ε"
julia> filter(isletter, str)
"εδxyδfxfyε"
julia> filter(!isletter, str)
"∀ > 0, ∃ > 0: |-| < ⇒ |()-()| < "
数学関数
Base.isapprox ── 関数
isapprox(x, y;
rtol::Real=rtoldefault(x,y,atol),
atol::Real=0,
nans::Bool=false,
norm::Function)
厳密でない等価比較です2。norm(x-y) <= max(atol, rtol*max(norm(x), norm(y))) なら true を返します。デフォルトの atol はゼロであり、デフォルトの rtol は x と y の型から決まります。キーワード引数 nans は NaN 同士が等しいとみなされるかどうかを制御します (デフォルトは false です)。
浮動小数点数を使った実数と複素数では、atol > 0 が指定されないときの rtol は x と y の eps の中で大きい方 (精度が低い方の eps) の平方根となります。これは仮数の桁の半分が合っていれば等しいとみなすことに対応します。それ例外のとき、つまり atol > 0 が指定されたときおよび引数が整数のときは、rtol のデフォルト値はゼロです。
x と y は数値の配列にもできます。この場合デフォルトの norm は LinearAlgebra.norm となりますが、キーワード引数 norm を渡せば変更できます (数値に対するデフォルトの norm は abs です)。x と y が配列で norm(x-y) が有限でない (±Inf または NaN となる) なら、比較は x と y の各要素がそれぞれ近似的に等しいかどうかを判定する処理にフォールバックします。
二項演算子 ≈ はデフォルトの引数を使った isapprox と等価であり、x ≉ y は !isapprox(x,y) と等価です。
デフォルトの atol は 0 なので、x ≈ 0 (デフォルトの許容値を使ったゼロとの近似比較) は x == 0 と等価です。このような場合には適切な atol を使うか、norm(x) ≤ atol とするか、x - y ≈ 0 となっているコードを x ≈ y と組み替えてください。ゼロでない atol を使うときに設定すべき値は問題の尺度 ("単位") によって変わるので、適切な atol の値を自動的に選択することはできません。例えば x がメートルで表した地球の半径 のときに x - y ≈ 0 を atol=1e-9 としたのでは小さすぎますが、x がメートルで表した水素原子の半径のときに atol=1e-9 では大きすぎます。
例
julia> 0.1 ≈ (0.1 - 1e-10)
true
julia> isapprox(10, 11; atol = 2)
true
julia> isapprox([10.0^9, 1.0], [10.0^9, 2.0])
true
julia> 1e-10 ≈ 0
false
julia> isapprox(1e-10, 0, atol=1e-8)
true
Base.Math.sincos ── メソッド
Base.Math.sind ── 関数
Base.Math.cosd ── 関数
Base.Math.tand ── 関数
Base.Math.sinpi ── 関数
Base.Math.cospi ── 関数
Base.Math.asind ── 関数
Base.Math.acosd ── 関数
Base.Math.atand ── 関数
Base.Math.sec ── メソッド
Base.Math.csc ── メソッド
Base.Math.cot ── メソッド
Base.Math.secd ── 関数
Base.Math.cscd ── 関数
Base.Math.cotd ── 関数
Base.Math.asec ── メソッド
Base.Math.acsc ── メソッド
Base.Math.acot ── メソッド
Base.Math.asecd ── 関数
Base.Math.acscd ── 関数
Base.Math.acotd ── 関数
Base.Math.sech ── メソッド
Base.Math.csch ── メソッド
Base.Math.coth ── メソッド
Base.asinh ── メソッド
Base.acosh ── メソッド
Base.atanh ── メソッド
Base.Math.asech ── メソッド
Base.Math.acsch ── メソッド
Base.Math.acoth ── メソッド
Base.Math.sinc ── 関数
Base.Math.cosc ── 関数
cosc(x)
\(x = 0\) なら \(0\) を返し、\(x \neq 0\) なら \(\cos(\pi x) / x - \sin(\pi x) / (\pi x^2)\) を返します。
Base.Math.deg2rad ── 関数
Base.Math.rad2deg ── 関数
Base.Math.hypot ── 関数
hypot(x, y)
オーバーフローとアンダーフローを避けながら \(\sqrt{|x|^2+|y|^2}\) を計算します。
この関数のコードは Carlos F. Borges による "An Improved Algorithm for hypot(a,b)" で示されるアルゴリズムを実装しています。この記事は ArXiv (https://arxiv.org/abs/1904.09481) で閲覧できます。
例
julia> a = Int64(10)^10;
julia> hypot(a, a)
1.4142135623730951e10
julia> √(a^2 + a^2) # a^2 がオーバーフローする。
ERROR: DomainError with -2.914184810805068e18:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
Stacktrace:
[...]
julia> hypot(3, 4im)
5.0
hypot(x...)
オーバーフローとアンダーフローを避けながら \(\sqrt{\sum |x_i|^2}\) を計算します。
例
julia> hypot(-5.7)
5.7
julia> hypot(3, 4im, 12.0)
13.0
Base.log ── メソッド
log(x)
x の自然対数を計算します。引数が負の Real のときは DomainError を送出します。複素数の返り値を得るには、複素数型の負の値を渡してください。
例
julia> log(2)
0.6931471805599453
julia> log(-3)
ERROR: DomainError with -3.0:
log will only return a complex result if called with a complex argument. Try log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
Base.log ── メソッド
log(b,x)
b を底とした x の対数を計算します。引数が負の Real のときは DomainError を送出します。
例
julia> log(4,8)
1.5
julia> log(4,2)
0.5
julia> log(-2, 3)
ERROR: DomainError with -2.0:
log will only return a complex result if called with a complex argument. Try log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
julia> log(2, -3)
ERROR: DomainError with -3.0:
log will only return a complex result if called with a complex argument. Try log(Complex(x)).
Stacktrace:
[1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
[...]
Base.log2 ── 関数
log2(x)
2 を底とした x の対数を計算します。引数が負の Real のときは DomainError を送出します。
例
julia> log2(4)
2.0
julia> log2(10)
3.321928094887362
julia> log2(-2)
ERROR: DomainError with -2.0:
NaN result for non-NaN input.
Stacktrace:
[1] nan_dom_err at ./math.jl:325 [inlined]
[...]
Base.log10 ── 関数
log10(x)
10 を底とした x の対数を計算します。引数が負の Real のときは DomainError を送出します。
例
julia> log10(100)
2.0
julia> log10(2)
0.3010299956639812
julia> log10(-2)
ERROR: DomainError with -2.0:
NaN result for non-NaN input.
Stacktrace:
[1] nan_dom_err at ./math.jl:325 [inlined]
[...]
Base.log1p ── 関数
log1p(x)
1+x の自然対数を正確に計算します。引数が -1 より小さい Real のときは DomainError を送出します。
例
julia> log1p(-0.5)
-0.6931471805599453
julia> log1p(0)
0.0
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:31
[...]
Base.Math.frexp ── 関数
frexp(val)
\(x \times 2^{\text{exp}}\) が val に等しいようなタプル (x,epr) を返します。ここで x の絶対値は区間 \([1/2, 1)\) に含まれるか \(0\) に等しい値です。
Base.exp10 ── 関数
Base.Math.ldexp ── 関数
Base.Math.modf ── 関数
modf(x)
x の整数部分と小数部分からなるタプル (fpart, ipart) を返します。両方の部分は引数と同じ符号を持ちます。
例
julia> modf(3.5)
(0.5, 3.0)
julia> modf(-3.5)
(-0.5, -3.0)
Base.expm1 ── 関数
Base.round ── メソッド
round([T,] x, [r::RoundingMode])
round(x, [r::RoundingMode]; digits::Integer=0, base = 10)
round(x, [r::RoundingMode]; sigdigits::Integer, base = 10)
数値 x を丸めます。
キーワード引数を指定しないと x は整数値に丸められ、T 型 (T が与えられなければ x と同じ型) の値が返ります。なお丸めた値が T 型で表せないと convert と同様に InexactError が発生します。
キーワード引数 digits が指定されると、小数点からその値だけ後ろに進んだ桁で丸められます (負の digits を指定すると小数点数から前に進んだ桁で切り捨てられます)。丸めでは底として base が使われます。
キーワード引数 sigdigits が与えられると、その値を有効数字の桁数として底が base の丸めが行われます。
RoundingMode 型の r は丸めの方向を制御します。デフォルトは RoundNearest であり、これは最も近い整数値に丸めることを基本として、同着 (小数部分が 0.5) のときは偶数を採用する方法です。グローバルの丸めモードが変更されると round が間違った値を返す可能性があることに注意してください (参照: rounding)。
例
julia> round(1.7)
2.0
julia> round(Int, 1.7)
2
julia> round(1.5)
2.0
julia> round(2.5)
2.0
julia> round(pi; digits=2)
3.14
julia> round(pi; digits=3, base=2)
3.125
julia> round(123.456; sigdigits=2)
120.0
julia> round(357.913; sigdigits=4, base=2)
352.0
桁数を指定して行う 2 以外の底を使った丸めでは、バイナリの浮動小数点数を使うときに結果が不正確になることがあります。例えば数値リテラル 1.15 が表す Float64 型の値は 1.15 よりも小さいのですが、1.2 に丸められます:
julia> x = 1.15
1.15
julia> @sprintf "%.20f" x
"1.14999999999999991118"
julia> x < 115//100
true
julia> round(x, digits=1)
1.2
拡張
round を新しい数値型に拡張するときは Base.round(x::NewType, r::RoundingMode) を定義すれば通常は十分です。
Base.Rounding.RoundingMode ── 型
RoundingMode
浮動小数点数が絡む演算における丸めモードを制御するときに使われる型です。rounding 関数と setrounding 関数の引数、および整数へ丸める関数 round の省略可能なキーワード引数として使われます。
現在サポートされる丸めモードは次の通りです:
Base.Rounding.RoundNearestTiesAway ── 定数
RoundNearestTiesAway
最も近い整数値に丸めることを基本として、同着 (小数部分が 0.5) のときはゼロから遠い方を採用します (C/C++ の round の振る舞いです)。
Base.Rounding.RoundNearestTiesUp ── 定数
RoundNearestTiesUp
最も近い整数値に丸めることを基本として、同着 (小数部分が 0.5) のときは正の無限大に近い方を採用します (Java/JavaScript の round の振る舞いです)。
Base.Rounding.RoundUp ── 定数
Base.Rounding.RoundDown ── 定数
Base.round ── メソッド
round(z::Complex[, RoundingModeReal, [RoundingModeImaginary]])
round(z::Complex[, RoundingModeReal, [RoundingModeImaginary]]; digits=, base=10)
round(z::Complex[, RoundingModeReal, [RoundingModeImaginary]]; sigdigits=, base=10)
複素数 z と同じ型を持つ最も近い整数値を返します。RoundingMode で指定した丸めモードで丸めが行われます。一つ目の RoundingMode は実部に使われ、二つ目の RoundingMode は虚部に使われます。
例
julia> round(3.14 + 4.5im)
3.0 + 4.0im
Base.floor ── 関数
Base.trunc ── 関数
Base.unsafe_trunc ── 関数
unsafe_trunc(T, x)
絶対値が abs(x) 以下の x に最も近い整数を x と同じ T で返します。処理結果が T 型で表現できないときは、任意の値が返る可能性があります。
Base.minmax ── 関数
Base.Math.clamp ── 関数
clamp(x, lo, hi)
lo <= x <= hi なら x を返し、x > hi なら hi を返し、x < lo なら lo を返します。引数は共通の型に昇格されます。
例
julia> clamp.([pi, 1.0, big(10.)], 2., 9.)
3-element Array{BigFloat,1}:
3.141592653589793238462643383279502884197169399375105820974944592307816406286198
2.0
9.0
julia> clamp.([11,8,5],10,6) # lo > hi となる例
3-element Array{Int64,1}:
6
6
10
clamp(x, T)::T
x を typemin(T) と typemax(T) の間に clamp し、結果を T 型に変換します。
例
julia> clamp(200, Int8)
127
julia> clamp(-200, Int8)
-128
Base.Math.clamp! ── 関数
Base.abs ── 関数
abs(x)
x の絶対値を計算します。
abs を符号付き整数に適用すると、オーバーフローが発生して負の値が返る場合があります。具体的に言うと、符号付き整数型が表せる最小の値の abs を取ったときにだけオーバーフローが起こります。つまり x == typemin(typeof(x)) だと abs(x) == x < 0 であり、-x と等しくなりません。
例
julia> abs(-3)
3
julia> abs(1 + im)
1.4142135623730951
julia> abs(typemin(Int64))
-9223372036854775808
Base.Checked.checked_abs ── 関数
Base.Checked.checked_neg ── 関数
Base.checked_neg(x)
必要ならオーバーフローのチェックを行いながら -x を計算します。例えば 2 の補数を使った標準的な符号付き整数 (例えば Int) は -typemin(Int) を表せないので、オーバーフローが起きます。
オーバーフローの保護により知覚できる程度の性能劣化が起こる可能性があります。
Base.Checked.checked_add ── 関数
Base.checked_add(x, y)
必要ならオーバーフローをチェックを行いながら x+y を計算します。
オーバーフローの保護により知覚できる程度の性能劣化が起こる可能性があります。
Base.Checked.checked_sub ── 関数
Base.checked_sub(x, y)
必要ならオーバーフローのチェックを行いながら x-y を計算します。
オーバーフローの保護により知覚できる程度の性能劣化が起こる可能性があります。
Base.Checked.checked_mul ── 関数
Base.checked_mul(x, y)
必要ならオーバーフローのチェックを行いながら x*y を計算します。
オーバーフローの保護により知覚できる程度の性能劣化が起こる可能性があります。
Base.Checked.checked_div ── 関数
Base.Checked.checked_rem ── 関数
Base.checked_rem(x, y)
必要ならオーバーフローのチェックを行いながら x%y を計算します。
オーバーフローの保護により知覚できる程度の性能劣化が起こる可能性があります。
Base.Checked.checked_fld ── 関数
Base.Checked.checked_mod ── 関数
Base.Checked.checked_cld ── 関数
Base.copysign ── 関数
copysign(x, y) -> z
x と同じ絶対値と y と同じ符号を持つ値 z を返します。
例
julia> copysign(1, -2)
-1
julia> copysign(-1, 2)
1
Base.signbit ── 関数
signbit(x)
x の符号が負なら true を返し、そうでなければ false を返します。
例
julia> signbit(-4)
true
julia> signbit(5)
false
julia> signbit(5.5)
false
julia> signbit(-4.1)
true
Base.flipsign ── 関数
flipsign(x, y)
y が負なら、x の符号を反転した値を返します。例えば abs(x) = flipsign(x, x) が成り立ちます。
例
julia> flipsign(5, 3)
5
julia> flipsign(5, -3)
-5
Base.sqrt ── メソッド
sqrt(x)
\(\sqrt{x}\) を返します。引数が負の Real なら DomainError を送出します。そのような場合に値が必要なら複素数型の負の実数を渡してください。前置演算子 √ は sqrt と等価です。
例
julia> sqrt(big(81))
9.0
julia> sqrt(big(-81))
ERROR: DomainError with -81.0:
NaN result for non-NaN input.
Stacktrace:
[1] sqrt(::BigFloat) at ./mpfr.jl:501
[...]
julia> sqrt(big(complex(-81)))
0.0 + 9.0im
Base.isqrt ── 関数
Base.Math.cbrt ── 関数
cbrt(x::Real)
x の三乗根 \(x^{1/3}\) を返します。x は負でも構いません (\(x < 0\) のときは負の実根が返ります)。
前置演算子 ∛ は cbrt と等価です。
例
julia> cbrt(big(27))
3.0
julia> cbrt(big(-27))
-3.0
Base.angle ── 関数
angle(z)
複素数 z の偏角を弧度法で返します。
例
julia> rad2deg(angle(1 + im))
45.0
julia> rad2deg(angle(1 - im))
-45.0
julia> rad2deg(angle(-1 - im))
-135.0
Base.binomial ── 関数
binomial(n::Integer, k::Integer)
二項係数 \(\binom{n}{k}\) を返します。この値は多項式 \((1+x)^n\) の第 \(k\) 項の係数です。
\(n\) が非負なら、二項係数は \(n\) 個の要素から \(k\) 個を選ぶ方法の個数に等しくなります:
\[\binom{n}{k} = \frac{n!}{k! (n-k)!}\]ここで \(n!\) は factorial 関数です。
\(n\) が負なら、二項係数は次の等式で定義されます:
\[\binom{n}{k} = (-1)^k \binom{k-n-1}{k}\]例
julia> binomial(5, 3)
10
julia> factorial(5) ÷ (factorial(5-3) * factorial(3))
10
julia> binomial(-5, 3)
-35
参照
外部リンク
- Wikipedia: 二項係数
Base.factorial ── 関数
factorial(n::Integer)
n の階乗です。n が Integer なら、階乗が整数として計算されます (少なくとも 64 ビットまで昇格されます)。n が大きいとオーバーフローする可能性がありますが、factorial(big(n)) とすれば任意精度で正確に階乗を計算できます。
例
julia> factorial(6)
720
julia> factorial(21)
ERROR: OverflowError: 21 is too large to look up in the table; consider using `factorial(big(21))` instead
Stacktrace:
[...]
julia> factorial(big(21))
51090942171709440000
参照:
外部リンク:
- Wikipedia: 階乗
Base.gcdx ── 関数
gcdx(x,y)
x と y の正の最大公約数およびベズー係数を計算します。ベズー係数とは \(ux+vy = d = \gcd(x,y)\) を満たす \(u,v\) のことです。(d,u,v) を返します。
引数には整数または有理数を指定できます。
有理数の引数は Julia 1.4 以降でサポートされます。
例
julia> gcdx(12, 42)
(6, -3, 1)
julia> gcdx(240, 46)
(2, -9, 47)
ベズー係数は一意ではありません。gcdx は拡張されたユークリッドのアルゴリズムによって計算される最小のベズー係数を返します (参照: Knuth, TAoCP, 2/e, p. 325, Algorithm X.)。符号付き整数に対するベズー係数は \(|u| < |y/d|\) と \(|v| < |x/d|\) が成り立つという意味で最小となり、u と v の符号は d が正となるように選ばれます。符号無し整数に対しては u と v が typemax に近い値になる可能性があり、そのとき等式は符号無し整数のモジュロ算術を通してのみ成立します。
Base.ispow2 ── 関数
ispow2(n::Integer) -> Bool
n が 2 のべきかどうかを判定します。
例
julia> ispow2(4)
true
julia> ispow2(5)
false
Base.nextpow ── 関数
Base.prevpow ── 関数
Base.nextprod ── 関数
nextprod([k_1, k_2,...], n)
整数 \(p_1\), \(p_2\), ... を使って \(\prod k_i^{p_i}\) と表せる n 以上の整数で最小のものを返します。
例
julia> nextprod([2, 3], 105)
108
julia> 2^2 * 3^3
108
Base.invmod ── 関数
invmod(x,m)
モジュロ m における x の逆元を計算します: つまり \(x y = 1 \pmod m\) と \(\text{div}(x,y) = 0\) を満たす \(y\) です。\(m = 0\) または \(\gcd(x,m) \neq 1\) が成り立つとき定義されません。
例
julia> invmod(2,5)
3
julia> invmod(2,3)
2
julia> invmod(5,6)
5
Base.powermod ── 関数
powermod(x::Integer, p::Integer, m)
\(x^p \pmod m\) を計算します。
例
julia> powermod(2, 6, 5)
4
julia> mod(2^6, 5)
4
julia> powermod(5, 2, 20)
5
julia> powermod(5, 2, 19)
6
julia> powermod(5, 3, 19)
11
Base.ndigits ── 関数
ndigits(n::Integer; base::Integer=10, pad::Integer=1)
整数 n を base 進法で書いたときの桁数を計算します (base は -1, 0, 1 のいずれかであってはいけません)。省略可能な引数 pad を与えると、その長さまでゼロ埋めされます (返り値は pad より小さくなりません)。
例
julia> ndigits(12345)
5
julia> ndigits(1022, base=16)
3
julia> string(1022, base=16)
"3fe"
julia> ndigits(123, pad=5)
5
Base.widemul ── 関数
Base.Math.evalpoly ── 関数
Base.Math.@evalpoly ── マクロ
@evalpoly(z, c...)
係数が c[1], c[2], ... の多項式 \(\sum_k x^{k-1} c[k]\) を評価します。つまり、係数は x のべきに関して昇順に与えられます。このマクロは高速なインラインコードに展開され、そのとき実数 z に対しては Horner 法、複素数 z に対しては Goertzel のアルゴリズムに似たより高速なアルゴリズムが使われます。
例
julia> @evalpoly(3, 1, 0, 1)
10
julia> @evalpoly(2, 1, 0, 1)
5
julia> @evalpoly(2, 1, 1, 1)
7
Base.FastMath.@fastmath ── マクロ
@fastmath expr
与えられた式を変形してから実行します。そのとき IEEE の意味論に厳密には従わない可能性のある関数の呼び出しを許可します。これにより可能な中で最も高速な演算が可能になりますが、計算結果は未定義となります ──数値的な結果が変更される可能性があるので注意が必要です。
このマクロは Clang の -ffast-math オプションに対応し、LLVM Fast-Math フラグを設定します。詳細は性能のための注釈の章を参照してください。
例
julia> @fastmath 1+2
3
julia> @fastmath(sin(3))
0.1411200080598672
カスタマイズ可能な二項演算子
一部の Unicode 文字は中置記法をサポートする新しい二項演算子として定義できます。例えば ⊗(x,y) = kron(x,y) は ⊗ (\otimes) をクロネッカー積として定義します。こうして定義した二項演算子を呼び出すときは、C = ⊗(A,B) のような通常の前置記法に加えて C = A ⊗ B のような中置記法も利用できます。こういった拡張機能がサポートされる文字には他に \odot (⊙) や \opus (⊕) があります。完全なリストはパーサーのコードを参照してください。
* のようにパースされる (優先度が同じ) 文字には * / ÷ % & ⋅ ∘ × |\\| ∩ ∧ ⊗ ⊘ ⊙ ⊚ ⊛ ⊠ ⊡ ⊓ ∗ ∙ ∤ ⅋ ≀ ⊼ ⋄ ⋆ ⋇ ⋉ ⋊ ⋋ ⋌ ⋏ ⋒ ⟑ ⦸ ⦼ ⦾ ⦿ ⧶ ⧷ ⨇ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨻ ⨼ ⨽ ⩀ ⩃ ⩄ ⩋ ⩍ ⩎ ⩑ ⩓ ⩕ ⩘ ⩚ ⩜ ⩞ ⩟ ⩠ ⫛ ⊍ ▷ ⨝ ⟕ ⟖ ⟗ があり、+ のようにパースされる文字には + - |\|| ⊕ ⊖ ⊞ ⊟ |++| ∪ ∨ ⊔ ± ∓ ∔ ∸ ≏ ⊎ ⊻ ⊽ ⋎ ⋓ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣ があります。他にも矢印・比較・べきに関連する文字があります。
-
訳注: 英語版では
div(x, y, r::RoundingMode=RoundToZero)というメソッドのドキュメントはエクスポートされていない (ソースに書かれてはいるがウェブページに載っていない) が、このメソッドは重要だと思われるので追加した。rem(x, y, r::RoundingMode=RoundToZero)についても同様とした。[return] -
訳注: 関数プロトタイプ中の
rtolのデフォルト値がソースコードと違っていたので、同じ値に変更した。[return] -
Donald Knuth, Art of Computer Programming, Volume 2: Seminumerical Algorithms, Sec. 4.6.4.[return]