めもらんだむ

個人的な備忘録。Julia言語やPythonに関することが中心になると思われます。

Julia言語における浮動小数点型

※断片的な知識の個人的なメモで、体系だった記述ではないと思います。体系だった知識を求める場合には、本家のサイトのドキュメント(https://docs.julialang.org/en/v1/)か成書を読むのがよいと思います。

Julia言語での浮動小数点の型は

  • Float16
  • Float32
  • Float64
  • BigFloat

の4つがある。上3つは、順に半精度(という?)、単精度、倍精度で、精度が固定されており、一番下のBigFloatは任意の精度が設定でき、倍精度を超える変数も定義できる。特にしてしなくとも、BigFloatのデフォルトでよろしくやってくれる。浮動小数点型のデフォルトはFloat64らしい。

Julia言語の変数には階層構造が存在する。一番下のレベルはconcrete typeと呼ばれ、浮動小数点型は上記の4つが該当する。

concrete typeの上の階層は全てabstract typeと呼ばれる。
浮動小数点型に属するconcrete typeを上に辿っていわゆるパンくずリスト的に記すと
Any > Number > Real > AbstractFloat > [Float16, Float32, Float64, BigFloat]
となる。
Fortranから科学計算に入った者からすると、RealとFloatが違う階層という点はちょっと戸惑うところ。
Anyが最上位の階層で、文字どおり「何でもアリ」にあたる。

1つ上の階層を調べるための関数はsupertype、1つ下の下位層を調べるための関数はsubtypes。下の階層にはいくつかのものが存在しうるので、コマンド名が複数形をとっていると思われる。

例えば、非常に小さい数値をとる確率値を考えないといけないとき、隣接する浮動小数点数の距離 (machine epsilon) が計算精度に影響を与えうる。その距離を調べるにはeps関数を用いる。
詳細は
docs.julialang.org
を参照のこと。

プログラムをコンパイルする際の変数の型判断は、この階層構造に沿ってよろしくやってくれるらしいし、自分で指定する場合には型の階層構造を意識することが必要と思われる。