发布于 2026-09-10T10:59:44.481988Z · Radim Marek · boringSQL

用五百万行 double precision 读数做演示:三次完全相同的查询分别得到 2500519211.7874823 和 2500519211.7874575 等不同结果。原因是并行聚合让多个 worker 以不确定的顺序抓取数据块,部分和的合并顺序随之变化,而 IEEE 754 浮点加法不满足结合律,每一步舍入都会改变结果。需要对账的金额类数据应当存成 numeric,它按精确十进制累加,与并行度和聚合顺序无关。
用五百万行 double precision 读数做演示:三次完全相同的查询分别得到 2500519211.7874823 和 2500519211.7874575 等不同结果。原因是并行聚合让多个 worker 以不确定的顺序抓取数据块,部分和的合并顺序随之变化,而 IEEE 754 浮点加法不满足结合律,每一步舍入都会改变结果。需要对账的金额类数据应当存成 numeric,它按精确十进制累加,与并行度和聚合顺序无关。
来源记录
- center.info_item · 4aff8c9c20c1d0c6 · 2026-10-03T04:08:35.169032Z
- pgweb.info_item · 4aff8c9c20c1d0c6 · 2026-10-03T04:08:55.967155Z