Julia入門 数字・文字列の組み込み型について
Juliaの組み込み型について。
http://nullbyte.hatenablog.com/entry/2015/05/30/001107:title:前回からの流れで辞書型について調べようか思ったけど、型の話を先にちょっと押さえておいたほうがいいかなと。
数字の型
以下のような型が用意されている。
型 | 意味 |
Bool | 真偽値 |
Int8 | 8bitの符号あり整数 |
Uint8 | 8bitの符号なし整数 |
Int16 | 16bitの符号あり整数 |
Uint16 | 16bitの符号なし整数 |
Int32 | 32bitの符号あり整数 |
Uint32 | 32bitの符号なし整数 |
Int64 | 64bitの符号あり整数 |
Uint64 | 64bitの符号なし整数 |
Int128 | 128bitの符号あり整数 |
Uint128 | 128bitの符号なし整数 |
Float16 | 16bitの浮動小数点型 |
Float32 | 32bitの浮動小数点型 |
Float64 | 64bitの浮動小数点型 |
Complex64 | 64bitの複素数 |
Complex128 | 128bitの複素数 |
整数を宣言した場合、64bit環境ではデフォルトInt64の整数になる。
小数点付きの数字はFloat64になる。
複素数はグローバル変数のimに入っていて、デフォルトではComplex64になる。
julia> typeof(256) Int64 julia> typeof(1.234) Float64 julia> typeof(2 * im + 1) Complex{Int64} (constructor with 1 method)
デフォルト以外の型の数字が欲しい時には、各型を小文字にした関数がコンストラクタとして用意されているので、それを使って生成する必要がある。
julia> c = int128(2) ^ 127 - 1 170141183460469231731687303715884105727 julia> typeof(c) Int128
ちなみに、128bitで収まらないような巨大な数字を計算したい場合は(RSA暗号とか?)、BigInt / BigFloatという型が使える。
(詳しくは公式ドキュメントを参照のこと)
julia> intval = typemax(Int128) # typemax: 指定した型の最大値を返す 170141183460469231731687303715884105727 julia> intval + 1 # 桁あふれしてしまう -170141183460469231731687303715884105728 julia> bigintval = BigInt(intval) 170141183460469231731687303715884105727 julia> bigintval + 1 # OK 170141183460469231731687303715884105728
上記の例のように、Juliaでは型の上限値を超えた値はを代入すると桁あふれする。
必要な型をあらかじめ考えておくこと。
文字列
ASCII文字列のASCIIString型、UTF8文字列のUTF8String型がある。
julia> ascii_str = "abc" "abc" julia> typeof(ascii_str) ASCIIString (constructor with 2 methods) julia> utf8_str = "文字列" "文字列" julia> typeof(utf8_str) UTF8String (constructor with 2 methods)
ちなみに、ASCIIString型とUTF8String型でも、結合などはそのまま行うことができる。
julia> ascii_str * utf8_str # 結合 "abc日本語"
また、一文字を表すChar型もあり、リテラルではシングルコーテーションで宣言する。
julia> ch = 'c' 'c' julia> typeof(ch) Char julia> not_ch = "c" "c" julia> typeof(not_ch) # ダブルコーテーションで宣言すると、Stringになる ASCIIString (constructor with 2 methods) julia> string(ch, "har") # CharとStringは*では結合できないので、string関数を使う "char" julia> ch * "har" ERROR: `*` has no method matching *(::Char, ::ASCIIString) julia> "some_string"[4] # Stringから添え字アクセスした時の返り値の文字列もCharになる 'e' julia> typeof("some_string"[4]) Char
そのほか、文字列型用の関数の一覧は公式ドキュメントを参照のこと。