LoginSignup
5
4

More than 3 years have passed since last update.

Julia その3 数値型と演算子

Posted at

数値データ型

Juliaの数値データ型は、整数型と浮動小数点数型に分かれる。
整数型は符号付き、符号なしに、それぞれ1,2,4,8,16バイト長が用意されている。名前はU?Int(8|16|32|64|128)で、2x5=10通りある。直交性が美しい。

byte型はなくて、代わりにUInt8を用いる。真偽値を表すBool型もある。実態は8ビット整数のようだ。

浮動小数点数は、Float(16|32|64)の3つが用意されている。

デフォルトとなる型は、システムによって変わる。64bitシステムでは、

julia> typeof(1)
Int64
julia> typeof(1.0)
Float64

となるが、32ビットシステムではそれぞれInt32, Float32になるそうだ。いまどきなかなか周りにないので確認のしようがないが。

BigInt, BigFloat

数学者向けのシステムらしく、無限精度の整数、浮動小数点数もデフォルトで用意されている。これは、GNU のGMP, GPFRライブラリを内部で使っているそうだ。十分長い整数リテラルを書くと自然にBigIntになる。シームレスで素晴らしい。

julia> typeof(11111111111111111111111111111111111111111111)
BigInt

一方BigFloatのほうは明示的に作らないとできないようだ。しかも浮動小数点リテラルから作ろうとすると、リテラルの時点でFloat64に丸められてしまうの意味がない。なので、parseを使って作るのが正解らしい。

julia> typeof(0.123456789123456789123456789123456789)
Float64

julia> a = BigFloat(0.123456789123456789123456789123456789)
0.1234567891234567837965840908509562723338603973388671875

julia> a = parse(BigFloat, "0.123456789123456789123456789123456789")
0.1234567891234567891234567891234567890000000000000000000000000000000000000000004

基本的な演算子はすべてBigIntをサポートしているようなので、ほとんど意識せずに利用できる。

julia> BigInt(111111111) ^ 5
16935087723754847838236041084523023336551

演算子

演算子は、割に普通だが、その1に書いたように÷演算子があったりする。ビット演算のxorは^で表現する言語が多い(C, Java, Pythonなど)のだが、Juliaではべき乗に使ってしまっているので、というなんと読んだらいいのかわからない記号を導入している。これはREPLでは\xor + tab で出る。

julia> 0x01 ⊻ 0x02
0x03

CやJavaにあるインクリメント、デクリメント演算子++,-- は無い。+=-=はある。全ての2項演算子に用意されている。

julia> a = 1
1

julia> a += 1
2

演算子と関数

Juliaの演算子は基本的に関数で、関数としても利用できる。

julia> +(1, 2)
3

このとき+(の間にスペースが入るとパースに失敗するので要注意。

ユーザ定義演算子

Juliaではユーザが演算子を定義できる。といっても演算子として使える記号の種類や、そのパース時の優先順位は決まっている。ドキュメントを探しても見つからないのだけど、

ここのソースで定義されているようだ。schemeでパースしているのか??びっくりだ。

演算子を定義する方法は関数の定義と同じ。演算子は関数だから当然だ。という演算子で2つ組のタプルを返すようにしてみよう。

julia> ∙(x, y) = x, y
∙ (generic function with 1 method)

julia> 1 ∙ 2
(1, 2)

ソースを見ると、本当にさまざまな記号が演算子として使えるようだ。ただこれらの記号には相互に見分けのつかないものも多いし、そもそもどう打ったらいいのかわからない。下手に多用すると、誰にも読めないメンテ不能のソースが爆誕しそうで恐ろしい。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4