RUST 基本类型 / f64精确相等 ≠ 数值上足够接近

把两个浮点数
放到同一把尺上

0.1 + 0.2 并没有“算坏”,它只是落在 0.3 旁边一个极近的位置。真正的问题是:你的业务允许它们相差多少?

局部放大尺
AB
为了看见微小差异,刻度会自动缩放;它不是从 0 开始的整条数轴。
1e-12
1e-12 × 数值尺度
严格的 a == bfalse
实际差值 |a − b|5.551…e−17
本次允许阈值1e−12
足够接近

差值没有越过你的容差线。

容差不是“修复精度”

它是一条业务规则。传感器允许千分之一的抖动,金额结算却可能要求以整数分为单位。不要在整个项目里随手撒一个神秘的 1e-6;先问清楚数据的尺度和可接受误差。

diff = (a - b).abs(); close = diff <= abs_eps.max(rel_eps * scale);