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 = NaN 返回 false。
ClickHouse 对 = 运算符也遵循这一规则。
不过,NaN 并不是某一个单独的值;凡是指数部分全为 1 且
尾数不为 0 的位模式,都属于 NaN。不同的操作以及不同的 CPU 架构都可能产生
具有不同符号位或不同尾数载荷的 NaN 值。例如:
0./0.会产生一个NaN,在大多数 x86 平台上其符号位为 1。- 字面量
nan会产生一个符号位为 0 的NaN。 - 在 PR #98230 之后,AArch64 NEON 路径上的
log在输入为负时返回的NaN,其符号位与 glibc 的标量log不同。
NaN 位模式会被哈希到
不同的桶中,并在包括
DISTINCT、GROUP BY、uniqExact、countDistinct 以及基于 Float 键的等值 JOIN 在内的集合语义操作中
被视为不同的值:
NaN 都不等于任何其他值,包括它自身) ,
但这可能会让人感到意外。如果你需要基于集合语义的操作将所有 NaN 值视为相等,
请在查询中将它们规范化:
DISTINCT、GROUP BY 和 JOIN 的键。
BFloat16
BFloat16 是一种 16 位浮点数据类型,由 8 位指数、符号位和 7 位尾数组成。
它适用于机器学习和 AI 应用。
ClickHouse 支持在 Float32 和 BFloat16 之间进行转换,
可使用 toFloat32() 或 toBFloat16 函数。
暂不支持大多数其他操作。