数値
標準の数値型
抽象数値型
Core.Number
── 型
Core.Real
── 型
Core.AbstractFloat
── 型
Core.Integer
── 型
Core.Signed
── 型
Core.Unsigned
── 型
Base.AbstractIrrational
── 型
AbstractIrrational <: Real
無理数を正確に表現する数値型を表す抽象上位型です。この型の値と他の数値の算術演算を行うと、この型の値は適切な精度へ自動的に丸められます。
部分型 MyIrrational <: AbstractIrrational
が最低でも実装すべきメソッドは次の通りです:
==(::MyIrrational, ::MyIrrational)
hash(x::MyIrrational, h::UInt)
convert(::Type{F}, x::MyIrrational) where {F <: Union{BigFloat, Float32, Float64}}
AbstractIrrational
の部分型が有理数になる可能性がある (例えば √n
を表す平方根型では n
が完全平方数のとき有理数となる) なら、その型は isinteger
, iszero
, isone
および Real
との ==
も実装するべきです (これらのメソッドの AbstractIrrational
に対するデフォルトの実装が false
を返すため)。さらに、有理数を表すときはその値の Rational
と同じハッシュを返す hash
を定義する必要があります。
具象数値型
Core.Float16
── 型
Float16 <: AbstractFloat
IEEE 754 規格に従う 16 ビットの浮動小数点数型です。
バイナリフォーマット: 符号 1 ビット, 指数 5 ビット, 小数 10 ビット
Core.Float32
── 型
Float32 <: AbstractFloat
IEEE 754 規格に従う 32 ビットの浮動小数点数型です。
バイナリフォーマット: 符号 1 ビット, 指数 8 ビット, 小数 23 ビット
Core.Float64
── 型
Float64 <: AbstractFloat
IEEE 754 規格に従う 64 ビットの浮動小数点数型です。
バイナリフォーマット: 符号 1 ビット, 指数 11 ビット, 小数 52 ビット
Base.MPFR.BigFloat
── 型
Core.Bool
── 型
Bool <: Integer
真偽値型です。true
と false
のどちらかを保持します。
Bool
は数値の一種です: false
は数値的には 0
に等しく、true
は数値的に 1
に等しくなります。また、false
は乗算において "強いゼロ" (strong zero) として振る舞います:
julia> false == 0
true
julia> true == 1
true
julia> 0 * NaN
NaN
julia> false * NaN
0.0
Core.Int8
── 型
Core.UInt8
── 型
Core.Int16
── 型
Core.UInt16
── 型
Core.Int32
── 型
Core.UInt32
── 型
Core.Int64
── 型
Core.UInt64
── 型
Core.Int128
── 型
Core.UInt128
── 型
Base.GMP.BigInt
── 型
Base.Complex
── 型
Complex{T<:Real} <: Number
T
型の実部と虚部を持つ複素数型です。
ComplexF16
, ComplexF32
, ComplexF64
はそれぞれ Complex{Float16}
, Complex{Float32}
, Complex{Float64}
の別名です。
Base.Rational
── 型
Base.Irrational
── 型
データフォーマット
Base.digits
── 関数
digits([T<:Integer], n::Integer; base::T = 10, pad::Integer = 1)
n
を base
進法で表したときの各桁を表す、要素型 T
の配列を返します。T
のデフォルト値は Int
で、base
のデフォルト値は 10
です。キーワード引数 pad
を指定すると、最低でもその桁までゼロ埋めされます。上位の桁が後ろに格納され、n == sum([digits[k]*base^(k-1) for k=1:length(digits)])
が成り立ちます。
例
julia> digits(10, base = 10)
2-element Array{Int64,1}:
0
1
julia> digits(10, base = 2)
4-element Array{Int64,1}:
0
1
0
1
julia> digits(10, base = 2, pad = 6)
6-element Array{Int64,1}:
0
1
0
1
0
0
Base.digits!
── 関数
digits!(array, n::Integer; base::Integer = 10)
n
を base
進法で表したときの各桁で配列を埋めます。上位の桁が配列の後ろに格納されます。配列の長さが足りなければ、下位の桁から配列の長さが足りなくなるまで配列が埋められます。配列が必要より長ければ、桁が存在しない部分はゼロ埋めされます。
例
julia> digits!([2,2,2,2], 10, base = 2)
4-element Array{Int64,1}:
0
1
0
1
julia> digits!([2,2,2,2,2,2], 10, base = 2)
6-element Array{Int64,1}:
0
1
0
1
0
0
Base.bitstring
── 関数
bitstring(n)
数値のビット表現を示す文字列を返します。
例
julia> bitstring(4)
"0000000000000000000000000000000000000000000000000000000000000100"
julia> bitstring(2.2)
"0100000000000001100110011001100110011001100110011001100110011010"
Base.parse
── 関数
parse(type, str; base)
文字列を数値としてパースします。Integer
型に対しては base
で底を指定できます (デフォルトの底は 10 です)。浮動小数点数型に対しては、文字列が小数点付きの浮動小数点数としてパースされます。Complex
型を指定すると、"R±Iim"
の形をした小数点付きの文字列が指定された型を持つ Complex(R,I)
としてパースされます。"im"
の部分には "i"
または "j"
も指定でき、"R"
や "Iim"
だけの文字列も複素数としてパースできます。文字列が正当な数値を含まないときはエラーが発生します。
parse(Bool, str)
は Julia 1.1 以降でサポートされます。
例
julia> parse(Int, "1234")
1234
julia> parse(Int, "1234", base = 5)
194
julia> parse(Int, "afc", base = 16)
2812
julia> parse(Float64, "1.2e-3")
0.0012
julia> parse(Complex{Float64}, "3.2e-1 + 4.5im")
0.32 + 4.5im
Base.tryparse
── 関数
Base.big
── 関数
Base.signed
── 関数
signed(T::Integer)
整数のビット型を同じサイズの符号付き整数型に変換します。
例
julia> signed(UInt16)
Int16
julia> signed(UInt64)
Int64
Base.unsigned
── 関数
unsigned(T::Integer)
整数のビット型を同じサイズの符号無し型に変換します。
例
julia> unsigned(Int16)
UInt16
julia> unsigned(UInt64)
UInt64
Base.float
── メソッド
Base.Math.significand
── 関数
significand(x)
浮動小数点数 x
の仮数部 (マンティッサ) を浮動小数点数として返します。x
がゼロでない有限の値なら、返り値は同じ型の \([1,2)\) に含まれる値となります。x
がゼロならゼロが返ります。
例
julia> significand(15.2)/15.2
0.125
julia> significand(15.2)*8
15.2
Base.Math.exponent
── 関数
Base.complex
── メソッド
complex(r, [i])
実数 r
または実数の配列 r
の要素を複素数に変換します。i
のデフォルト値は 0
です。
例
julia> complex(7)
7 + 0im
julia> complex([1, 2, 3])
3-element Array{Complex{Int64},1}:
1 + 0im
2 + 0im
3 + 0im
Base.bswap
── 関数
Base.hex2bytes
── 関数
hex2bytes(s::Union{AbstractString,AbstractVector{UInt8}})
十六進数列を表す ASCII コードからなる文字列または配列を受け取り、そのバイナリ表現に対応するバイト列を Vector{UInt8}
として返します。s
に含まれる隣り合う十六進数の一組が返り値のベクトルにおける一バイトを表します。
s
の長さは偶数である必要があり、その長さの半分が返り値の配列の長さとなります。インプレースバージョンの hex2bytes!
や逆の変換を行う bytes2hex
も参照してください。
例
julia> s = string(12345, base = 16)
"3039"
julia> hex2bytes(s)
2-element Array{UInt8,1}:
0x30
0x39
julia> a = b"01abEF"
6-element Base.CodeUnits{UInt8,String}:
0x30
0x31
0x61
0x62
0x45
0x46
julia> hex2bytes(a)
3-element Array{UInt8,1}:
0x01
0xab
0xef
Base.hex2bytes!
── 関数
Base.bytes2hex
── 関数
bytes2hex(a::AbstractArray{UInt8}) -> String
bytes2hex(io::IO, a::AbstractArray{UInt8})
バイトの配列 a
を文字列を使った十六進表記に変換します。bytes2hex(a)
では String
が返り、bytes2hex(io, a)
では変換結果の文字列が io
に書き込まれます。十六進の文字は全て小文字です。
例
julia> a = string(12345, base = 16)
"3039"
julia> b = hex2bytes(a)
2-element Array{UInt8,1}:
0x30
0x39
julia> bytes2hex(b)
"3039"
一般的な数値関数と定数
Base.one
── 関数
one(x)
one(T::Type)
x
に対する乗算の単位元、つまり one(x)*x == x*one(x) == x
が成り立つような値を返します。引数に型 T
を与えると、T
型の任意の値に対する乗算の単位元が返ります。
可能なら、one(x)
は x
と同じ型の値を返し、one(T)
は T
型の値を返します。しかし乗算の単位元は次元を持ってはいけないので、次元を持つ量 (例えば日数) を表す型ではこれは不可能です。そのような場合 one(x)
は x
と同じ精度 (行列なら加えて同じ形状) を持つ "単位値" を返します。
x
が次元を持つ場合に x
と同じ型 (あるいは T
型) の量が必要なら、one
ではなく oneunit
を使ってください。
例
julia> one(3.7)
1.0
julia> one(Int)
1
julia> import Dates; one(Dates.Day(1))
1
Base.oneunit
── 関数
Base.zero
── 関数
zero(x)
zero(T::Type)
x
の型における加算の単位元を返します。x
に型自身を指定することもできます。
例
julia> zero(1)
0
julia> zero(big"2.0")
0.0
julia> zero(rand(2,2))
2×2 Array{Float64,2}:
0.0 0.0
0.0 0.0
Base.im
── 定数
Base.MathConstants.pi
── 定数
Base.MathConstants.ℯ
── 定数
Base.MathConstants.catalan
── 定数
Base.MathConstants.eulergamma
── 定数
Base.MathConstants.golden
── 定数
Base.Inf
── 定数
Base.Inf32
── 定数
Base.Inf16
── 定数
Base.NaN
── 定数
Base.NaN32
── 定数
Base.NaN16
── 定数
Base.issubnormal
── 関数
Base.isfinite
── 関数
Base.isinf
── 関数
Base.isnan
── 関数
Base.iszero
── 関数
iszero(x)
x == zero(x)
なら true
を返します。x
が配列なら、x
の全ての要素がゼロかどうかが判定されます。
例
julia> iszero(0.0)
true
julia> iszero([1, 9, 0])
false
julia> iszero([false, 0, 0])
true
Base.isone
── 関数
isone(x)
x == one(x)
なら true
を返します。x
が配列なら、x
が恒等行列かどうかが判定されます。
例
julia> isone(1.0)
true
julia> isone([1 0; 0 2])
false
julia> isone([1 0; 0 true])
true
Base.nextfloat
── 関数
nextfloat(x::AbstractFloat, n::Integer)
n >= 0
なら x
に nextfloat
を n
回適用した結果を返し、n < 0
なら prevfloat
を -n
回適用した結果を返します。
nextfloat(x::AbstractFloat)
x < y
を満たす x
と同じ型の浮動小数点数 y
の中で最小のものを返します。そのような y
が存在しない場合 (例えば x
が Inf
あるいは NaN
のとき) には x
を返します。
Base.prevfloat
── 関数
prevfloat(x::AbstractFloat, n::Integer)
n >= 0
なら x
に prevfloat
を n
回適用した結果を返し、n < 0
なら nextfloat
を -n
回適用した結果を返します。
prevfloat(x::AbstractFloat)
x < y
を満たす x
と同じ型の浮動小数点数 y
の中で最大のものを返します。そのような y
が存在しない場合 (例えば x
が -Inf
あるいは NaN
のとき) には x
を返します。
Base.isinteger
── 関数
Base.isreal
── 関数
isreal(x) -> Bool
x
または x
の全ての要素が数値的に何らかの実数と等しいかどうかを判定します。ここで "実数" には無限と NaN を含みます。isreal(x)
は isequal(x, real(x))
のとき true
を返します。
例
julia> isreal(5.)
true
julia> isreal(Inf + 0im)
true
julia> isreal([4.; complex(0,1)])
false
Core.Float32
── メソッド
Float32(x [, mode::RoundingMode])
x
から Float32
を作成します。x
を正確に表せないときは mode
を丸めモードとした丸めが行われます。
例
julia> Float32(1/3, RoundDown)
0.3333333f0
julia> Float32(1/3, RoundUp)
0.33333334f0
利用可能な丸めモードについては RoundingMode
を参照してください。
Core.Float64
── メソッド
Float64(x [, mode::RoundingMode])
x
から Float64
を作成します。x
を正確に表せないときは mode
を丸めモードとした丸めが行われます。
例
julia> Float64(pi, RoundDown)
3.141592653589793
julia> Float64(pi, RoundUp)
3.1415926535897936
利用可能な丸めモードについては RoundingMode
を参照してください。
Base.Rounding.rounding
── 関数
Base.Rounding.setrounding
── メソッド
setrounding(T, mode)
浮動小数点数型 T
に対する丸めモードを設定します。この値は基礎算術演算 (+
, -
, *
, /
, sqrt
) と型変換における丸めモードとして使われます。デフォルトの丸めモード (RoundNearest
) を変更すると、基礎算術演算以外の数値関数が不正確あるいは無効な値を返す可能性があります。
現在この関数は T == BigFloat
に対してだけサポートされます。
この関数はスレッドセーフではありません。実行すると、実行中の全てのスレッドが影響を受けます。また、設定を利用する処理が一つのスレッドで行われている最中に別のスレッドから設定を並列に変更したときの振る舞いは未定義です。
Base.Rounding.setrounding
── メソッド
setrounding(f::Function, T, mode)
f
を実行する間だけ浮動小数点数型 T
の丸めモードを変更します。論理的には次のコードと等価です:
old = rounding(T)
setrounding(T, mode)
f()
setrounding(T, old)
利用可能な丸めモードについては RoundingMode
を参照してください。
Base.Rounding.get_zero_subnormals
── 関数
get_zero_subnormals() -> Bool
非正規 (subnormal, denormal) な浮動小数点数の絡む演算が IEEE 算術の規則に従うなら false
を返し、そうでなくゼロに変換される可能性があるなら true
を返します。
この関数は現在のスレッドだけに影響します。
Base.Rounding.set_zero_subnormals
── 関数
set_zero_subnormals(yes::Bool) -> Bool
yes
が false
なら、この関数の呼び出し以降に行われる非正規な浮動小数点数の絡む演算が IEEE 算術の規則に従うようになります。そうでなく yes
が true
なら、浮動小数点数の演算において非正規化数の入力および出力をゼロに変換することが許可されます (ただし必須にはなりません)。正常に設定できれば true
を返しますが、yes == true
でハードウェアが非正規化数をゼロにする機能をサポートしていなかったときは false
を返します。
一部のハードウェアでは set_zero_subnormals(true)
とすると高速になりますが、そうすると (x-y==0) == (x==y)
といった恒等式は成り立たなくなります。
この関数は現在のスレッドだけに影響します。
整数
Base.count_ones
── 関数
Base.count_zeros
── 関数
count_zeros(x::Integer) -> Integer
x
のバイナリ表現に含まれる 0
の個数を返します。
例
julia> count_zeros(Int32(2 ^ 16 - 1))
16
Base.leading_zeros
── 関数
leading_zeros(x::Integer) -> Integer
x
のバイナリ表現の先頭に含まれる 0
の個数を返します。
例
julia> leading_zeros(Int32(1))
31
Base.leading_ones
── 関数
leading_ones(x::Integer) -> Integer
x
のバイナリ表現の先頭に含まれる 1
の個数を返します。
例
julia> leading_ones(UInt32(2 ^ 32 - 2))
31
Base.trailing_zeros
── 関数
trailing_zeros(x::Integer) -> Integer
x
のバイナリ表現の末尾に含まれる 0
の個数を返します。
例
julia> trailing_zeros(2)
1
Base.trailing_ones
── 関数
trailing_ones(x::Integer) -> Integer
x
のバイナリ表現の末尾に含まれる 1
の個数を返します。
例
julia> trailing_ones(3)
2
Base.isodd
── 関数
isodd(x::Integer) -> Bool
x
が奇数 (2 で割り切れない) なら true
を返し、それ以外のとき false
を返します。
例
julia> isodd(9)
true
julia> isodd(10)
false
Base.iseven
── 関数
iseven(x::Integer) -> Bool
x
が偶数 (2 で割り切れる) なら true
を返し、それ以外のとき false
を返します。
例
julia> iseven(9)
false
julia> iseven(10)
true
Core.@int128_str
── マクロ
@int128_str str
@int128_str(str)
文字列 str
を Int128
としてパースします。str
が正当な整数を表さなければ ArgumentError
を送出します。
Core.@uint128_str
── マクロ
@uint128_str str
@uint128_str(str)
文字列 str
を UInt128
としてパースします。str
が正当な整数を表さなければ ArgumentError
を送出します。
BigFloat
と BigInt
BigFloat
型と BigInt
型はそれぞれ任意精度の浮動小数点数と整数の算術を実装します。BigFloat
では GNU MPFR が使われ、BigInt
では GNU Multiple Precision Arithmetic Library (GMP) が使われます。
Base.MPFR.BigFloat
── メソッド
BigFloat(x::Union{Real, AbstractString}
[, rounding::RoundingMode=rounding(BigFloat)];
[precision::Integer=precision(BigFloat)])
x
から精度 precision
の任意精度浮動小数点数を作成します。引数 rounding
には変換が正確に行えないときに丸めるべき方向を指定します。rounding
と precision
を指定しなければ現在のグローバルの値が使われます。
BigFloat(x::Real)
は convert(BigFloat,x)
と基本的に等価です。ただし x
が最初から BigFloat
のとき convert(BigFloat,x)
は x
を返すのに対して、BigFloat(x::Real)
は現在のグローバルの精度が設定された BigFloat
値を返す点が異なります。
BigFloat(x::AbstractString)
は parse(x)
と等価です。このメソッドが利便性のために提供されているのは、十進のリテラルがパース時に Float64
に変換されてしまうためです。例えば BigFloat(2.1)
は意図通りの値を生成しません。
例
julia> BigFloat(2.1) # この 2.1 は Float64
2.100000000000000088817841970012523233890533447265625
julia> BigFloat("2.1") # 2.1 に最も近い BigFloat
2.099999999999999999999999999999999999999999999999999999999999999999999999999986
julia> BigFloat("2.1", RoundUp)
2.100000000000000000000000000000000000000000000000000000000000000000000000000021
julia> BigFloat("2.1", RoundUp, precision=128)
2.100000000000000000000000000000000000007
キーワード引数 precision
は Julia 1.1 以降でサポートされます。Julia 1.0 では precision
が二つ目の位置引数なので、BigFloat(x, precision)
としてください。
参照:
Base.precision
── 関数
Base.precision
── メソッド
Base.MPFR.setprecision
── 関数
setprecision([T=BigFloat,] precision::Int)
T
型の算術で使用する精度 (ビット数) を設定します。
この関数はスレッドセーフではありません。実行すると、実行中の全てのスレッドが影響を受けます。また、設定を利用する処理が一つのスレッドで行われている最中に別のスレッドから設定を並列に変更したときの振る舞いは未定義です。
setprecision(f::Function, [T=BigFloat,] precision::Integer)
T
型の算術の精度 (ビット数) を f
を実行している間だけ変更します。次のコードと論理的に等価です:
old = precision(BigFloat)
setprecision(BigFloat, precision)
f()
setprecision(BigFloat, old)
通常は setprecision(T, precision) do ... end
として使われます。
注意: nextfloat()
と prevfloat()
は setprecision
が設定した精度を使いません。