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

testthat::expect_equal公差设置不生效问题咨询

问题分析与解决方案

这不是testthat的bug,而是对tolerance参数的认知偏差——testthat的expect_equal()默认使用相对公差,而非你直觉中的绝对公差。

具体计算验证

你的实际值与预期值的绝对差为:
0.00020237234 - 0.00020237230 = 4e-10

当使用默认或手动设置tolerance=1e-8时,testthat会按照以下逻辑判断是否通过:
绝对差 <= tolerance * max(绝对值(实际值), 绝对值(预期值))

代入数值计算允许的最大差异:
1e-8 * 0.00020237234 ≈ 2.0237e-12

显然4e-10远大于2.0237e-12,因此测试失败。

为什么tolerance=1e-6能通过?

当设置tolerance=1e-6时,允许的相对差异为:
1e-6 * 0.00020237234 ≈ 2.0237e-10

由于R中十进制数转二进制浮点数存在微小精度偏差,你的实际差异可能恰好略小于这个值,因此测试通过。但这种设置属于“碰巧覆盖需求”,并非针对绝对差的合理配置。

正确的解决方案

方案1:使用绝对公差判断

如果你想基于固定数值的差异判断,设置scale=1,此时tolerance代表允许的最大绝对差异:

expect_equal(Gamma, 0.0002023723, tolerance = 1e-9, scale = 1)

这个设置下,允许的绝对差是1e-9,你的4e-10远小于该值,测试会正常通过。

方案2:调整相对公差适配需求

计算所需的相对公差:4e-10 / 0.00020237234 ≈ 1.9765e-6,因此设置tolerance=2e-6也能通过测试:

expect_equal(Gamma, 0.0002023723, tolerance = 2e-6)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:50:20