【Clickhouse】float 计算误差

Float 为二进制 精度有损,每次求和的结果可能一样,由于相加顺序不一样导致。

bigDecimal是无损的,底层为十进制,但是存储占用更大。

举例:

SELECT 0.1 + 0.2 AS result

在 ClickHouse 中,运行上述查询,可能会得到一个结果接近于 0.3,但不完全相等的值,例如 0.30000000000000004。这是因为浮点数的二进制表示无法完全精确地表示 0.1 和 0.2。

浮点数误差来源

浮点数中的舍入误差是由以下几个因素造成的:

  • 有限的二进制表示:浮点数使用有限的二进制位数来表示实数。由于二进制无法精确表示一些十进制小数,例如 0.1 或 0.3,转换为二进制时会导致舍入误差。

  • 舍入模式:浮点数计算中的舍入模式决定了如何处理舍入误差。常见的舍入模式有四舍五入、向上取整、向下取整等。不同的舍入模式可能会导致不同的舍入误差。

  • 累积的舍入误差:在复杂的计算中,多个浮点数的运算会导致舍入误差的累积。由于浮点数的有效位数有限,累积的舍入误差可能会导致结果的微小差异。

  • 计算顺序:浮点数计算的顺序也可能影响舍入误差。由于浮点数的运算不满足交换律和结合律,不同的计算顺序可能会产生不同的舍入误差。

综上所述,浮点数中的舍入误差是由于有限的二进制表示、舍入模式、累积的舍入误差和计算顺序等因素的综合作用所造成的。这些因素使得浮点数的计算结果在某些情况下无法精确表示实数,从而引入了舍入误差。

0.8 转换为二进制小数

将十进制数 0.8 转换为二进制小数时,可以得到以下结果:

0.8 的二进制表示为 0.110011001100110011001100110011...(无限循环)。

转换过程如下:

将 0.8 乘以 2,得到 1.6。整数部分为 1,小数部分为 0.6。

将 0.6 乘以 2,得到 1.2。整数部分为 1,小数部分为 0.2。

将 0.2 乘以 2,得到 0.4。整数部分为 0,小数部分为 0.4。

将 0.4 乘以 2,得到 0.8。整数部分为 0,小数部分为 0.8。

重复上述步骤,得到的小数部分会无限循环下去:0.110011001100110011001100110011...

这个转换过程显示了 0.8 的二进制表示是一个无限循环的二进制小数。然而,由于计算机浮点数的存储和精度限制,无法精确地表示这个无限循环的二进制小数。因此,在实际计算中,计算机会使用一个近似值来存储和处理 0.8,可能会导致微小的舍入误差。

二进制数转换为小数

将二进制数转换为小数的规则如下:

  • 将二进制数的每一位按权重展开,权重从左到右依次为 20、2(-1)、2(-2)、2(-3) 等。
  • 将每一位的权重与对应的二进制位相乘,并将结果相加,得到对应的小数值。
    具体步骤如下:
  1. 将二进制数的整数部分从左到右依次乘以 2 的幂,幂值从 0 开始递增。
  2. 将二进制数的小数部分(如果有)从左到右依次乘以 2 的负幂,幂值从 -1 开始递减。
  3. 将上述计算得到的结果相加,得到对应的小数值。

需要注意的是,对于无限循环的二进制数,转换为小数时可能无法精确表示,因为计算机浮点数的存储和精度是有限的。在实际计算中,可能会使用一个近似值来表示。

下面是一个示例,将二进制数 0.101 转换为小数:

复制代码
0.101 转换为小数 = 
(1 * 2^(-1)) + (0 * 2^(-2)) + (1 * 2^(-3)) = 0.5 + 0 + 0.125 = 0.625

因此,0.101 的二进制数表示为 0.625。

相关推荐
Georgeviewer3 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue4 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006345 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
迅易科技5 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics5 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1235 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术5 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
Litluecat6 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC6 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow
触底反弹6 小时前
🔥 2026 大模型选择指南:别再只看 Benchmark 了,这些维度才是关键!
人工智能·面试