メインコンテンツへスキップ
正確な計算が必要な場合、特に高い精度が求められる金融データや業務データを扱う場合は、代わりに Decimal の使用を検討してください。以下に示すように、浮動小数点数 では誤差が生じることがあります。
CREATE TABLE IF NOT EXISTS float_vs_decimal
(
   my_float Float64,
   my_decimal Decimal64(3)
)
ENGINE=MergeTree
ORDER BY tuple();

# 小数点以下 2 桁のランダムな数値を 1 000 000 個生成し、floatdecimal として保存する
INSERT INTO float_vs_decimal SELECT round(randCanonical(), 3) AS res, res FROM system.numbers LIMIT 1000000;
SELECT sum(my_float), sum(my_decimal) FROM float_vs_decimal;

┌──────sum(my_float)─┬─sum(my_decimal)─┐
499693.60500000004499693.605
└────────────────────┴─────────────────┘

SELECT sumKahan(my_float), sumKahan(my_decimal) FROM float_vs_decimal;

┌─sumKahan(my_float)─┬─sumKahan(my_decimal)─┐
499693.605499693.605
└────────────────────┴──────────────────────┘
ClickHouse と C における対応する型を以下に示します。
  • Float32float.
  • Float64double.
ClickHouse の浮動小数点型には、次の別名があります。
  • Float32FLOAT, REAL, SINGLE.
  • Float64DOUBLE, DOUBLE PRECISION.
テーブルの作成時には、浮動小数点数の数値パラメータを指定できます (例: FLOAT(12), FLOAT(15, 22), DOUBLE(12), DOUBLE(4, 18)) が、ClickHouse はそれらを無視します。

浮動小数点数の使用

  • 浮動小数点数を用いた計算では、丸め誤差が生じることがあります。
SELECT 1 - 0.9

┌───────minus(1, 0.9)─┐
0.09999999999999998
└─────────────────────┘
  • 計算結果は、計算方法 (コンピューターシステムのプロセッサの種類やアーキテクチャ) によって異なります。
  • 浮動小数点計算では、無限大 (Inf) や「非数」(NaN) のような値になることがあります。計算結果を処理する際は、この点を考慮する必要があります。
  • テキストから浮動小数点数をパースする場合、結果がマシンで表現可能な最も近い数値にならないことがあります。

NaN と Inf

ClickHouse では、標準SQLとは異なり、次のカテゴリの浮動小数点数をサポートしています。
  • Inf – 無限大。
SELECT 0.5 / 0

┌─divide(0.5, 0)─┐
│            inf │
└────────────────┘
  • -Inf — 負の無限大。
SELECT -0.5 / 0

┌─divide(-0.5, 0)─┐
-inf │
└─────────────────┘
  • NaN — 非数。
SELECT 0 / 0

┌─divide(0, 0)─┐
│          nan │
└──────────────┘
NaN のソート規則については、ORDER BY 句のセクションを参照してください。

BFloat16

BFloat16 は、8 ビットの指数と符号、および 7 ビットの仮数を持つ 16 ビット浮動小数点データ型です。 機械学習や AI アプリケーションで役立ちます。 ClickHouse は Float32BFloat16 間の変換をサポートしており、toFloat32() または toBFloat16 関数を使用して変換できます。
他のほとんどの操作はサポートされていません。
最終更新日 2026年6月10日