Julia/Integers and Floating-Point Numbers
Juliaは基本となる数値型を幅広く提供している
Int8 〜 Int128
UInt8 〜 UInt128
Float16(half) 〜 Float64 (double)
code:jl
julia> typeof(128)
Int64
これをベースに有理数型や複素数型を提供している
0xや0bを使ってUIntのリテラルを作れる
0xdeadbeef
UIntリテラルの直前に-をつけると2の補数になる オーバーフローしたら黙って捨てられるのでこれでいい
code:jl
julia> 0xff + 0x1
0x00
typeminとtypemax関数があって便利
code:jl
julia> typemax(UInt32)
0xffffffff
オーバーフローを避けたいときはBigIntを使う
big関数がコンストラクタ
big(666)
big"999999999999999999999999999999"
数値キャストはInt32(42)のように囲うだけでよい
sizeof(Int32)のようにするとメモリ上のサイズを確認できる
bitstring(UInt8(42))のようにするとメモリ 上のバイナリ表現を確認できる
地味に便利
floatの正の0と負の0で様子を見られる
code:jl
julia> bitstring(0.0)
"0000000000000000000000000000000000000000000000000000000000000000"
julia> bitstring(-0.0)
"1000000000000000000000000000000000000000000000000000000000000000"
julia> 0.0 == -0.0
true
無限
InfやInf32などがある(負もある)
NaNも同様
Machine epsilonはeps(Float64)で得られる
直前・直後のfloatをprevfloat(42.195)、nextfloat(42.195)で得られる
基数変換して表示するにはstring(256, base=16)
パース
code:jl
julia> parse(Float16, "42.195")
Float16(42.2)
setroundingとsetprecisionにブロックを渡すと精度や丸めを制御できる
数値の係数はリテラルで42xのように書ける
code:jl
julia> x = 100
100
julia> 0.2x
20.0
型変換を避けるショートハンドとして、zero(型)とone(型)がある
code:jl
julia> one(Float32)
1.0f0
julia> zero(Float32)
0.0f0