You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言all.equal函数对相同绝对差的两组比较输出不同结果的疑问

为什么all.equal在绝对差值相同的情况下返回不同结果?

你遇到的问题核心是浮点数的二进制存储精度限制——十进制小数在计算机中无法被精确表示,导致看似相等的差值实际存在微小偏差:

  • 0.7与0.6的差值,实际计算结果是0.09999999999999987(略小于0.1),落在tolerance=0.1的容忍范围内,所以all.equal返回TRUE。
  • 0.7与0.8的差值,实际计算结果是0.10000000000000009(略大于0.1),超出了容忍阈值,因此返回差异提示。

验证代码

# 查看浮点数值的精确表示
sprintf("%.20f", 0.7 - 0.6)
# 输出:0.09999999999999987000
sprintf("%.20f", 0.8 - 0.7)
# 输出:0.10000000000000009000

# 单独测试两组比较
all.equal(0.7, 0.6, tolerance = 0.1, scale = 1)  # TRUE
all.equal(0.7, 0.8, tolerance = 0.1, scale = 1)  # "Mean absolute difference: 0.1"

解决方案

如果需要严格基于绝对差值判断,可以直接使用数值比较替代all.equal:

map2(c(1,1,0.7), c(1,1,0.8), ~abs(.x - .y) <= 0.1)
# 结果会返回[[1]] TRUE, [[2]] TRUE, [[3]] TRUE

或者微调tolerance为一个略大于0.1的值(比如0.1000000001),也能让两组比较都返回TRUE。

内容的提问来源于stack exchange,提问作者schd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:35:05