ClickHouse と C における対応する型を以下に示します。
Float32—float.Float64—double.
Float32—FLOAT,REAL,SINGLE.Float64—DOUBLE,DOUBLE PRECISION.
FLOAT(12), FLOAT(15, 22), DOUBLE(12), DOUBLE(4, 18)) が、ClickHouse はそれらを無視します。
浮動小数点数の使用
- 浮動小数点数を用いた計算では、丸め誤差が生じることがあります。
- 計算結果は、計算方法 (コンピューターシステムのプロセッサの種類やアーキテクチャ) によって異なります。
- 浮動小数点計算では、無限大 (
Inf) や「非数」(NaN) のような値になることがあります。計算結果を処理する際は、この点を考慮する必要があります。 - テキストから浮動小数点数をパースする場合、結果がマシンで表現可能な最も近い数値にならないことがあります。
NaN と Inf
Inf– 無限大。
-Inf— 負の無限大。
NaN— 非数。
NaN のソート規則については、ORDER BY 句のセクションを参照してください。
集合セマンティクスにおける NaN 値
NaN = NaN が false を返すように NaN が定義されています。
ClickHouse も = 演算子ではこの規則に従います。
ただし、NaN は単一の値ではなく、指数がすべて 1 で、
仮数が 0 でない任意のビットパターンを指します。異なる操作や CPU アーキテクチャでは、
符号ビットや仮数ペイロードが異なる NaN
値が生成されることがあります。たとえば、次のとおりです。
0./0.は、ほとんどの x86 プラットフォームで符号ビットが 1 のNaNを生成します。- リテラル
nanは、符号ビットが 0 のNaNを生成します。 - PR #98230 以降、AArch64 NEON パスの
logは、負の入力に対して glibc のスカラーlogとは符号ビットが異なるNaNを返します。
NaN ビットパターンは
異なるバケットにハッシュされ、DISTINCT、GROUP BY、uniqExact、countDistinct、
および Float キーに対する等値 JOIN など、集合セマンティクスに基づく操作では
それぞれ別の値として扱われます。
NaN は、自身を含む他のどの値とも等しくありません)
が、意外に感じられるかもしれません。集合のセマンティクスに基づく操作で、すべての NaN 値を等しいものとして扱う必要がある場合は、
クエリ内で正規化してください:
DISTINCT、GROUP BY、JOIN のキーにも適用できます。
BFloat16
BFloat16 は、8 ビットの指数と符号、および 7 ビットの仮数を持つ 16 ビット浮動小数点データ型です。
機械学習や AI アプリケーションで役立ちます。
ClickHouse は Float32 と BFloat16 間の変換をサポートしており、toFloat32() または toBFloat16 関数を使用して変換できます。
他のほとんどの操作はサポートされていません。