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

在R中按固定时间间隔保存数据的精度问题求解

解决循环中按时间间隔记录数值的浮点数精度问题

核心问题是浮点数累加时的精度误差,导致t无法精确等于record_interval的整数倍,直接用t %% record_interval == 0判断会失效。以下是两种简洁的解决方案:

方案一:通过余数的最小距离判断

计算t对record_interval取模后的余数,检查它到0或到record_interval的最小距离是否小于设定容差:

t <- 0
t_end <- 10
time_step <- 0.01
record_interval <- 1
tolerance <- time_step * 0.1  # 容差可根据需求调整

while (t <= t_end){
  remainder <- t %% record_interval
  if (min(abs(remainder), abs(remainder - record_interval)) < tolerance) {
    print(round(t, 2))  # 按需取整,避免显示精度冗余
  }
  t <- t + time_step
}

这种方式无需额外逻辑,通过min()函数统一处理余数接近0或接近record_interval的两种情况,代码简洁且符合需求。

方案二:判断是否接近整数倍

计算t与record_interval的比例,检查该比例是否接近整数:

t <- 0
t_end <- 10
time_step <- 0.01
record_interval <- 1
tolerance <- time_step * 0.1

while (t <= t_end){
  if (isTRUE(all.equal(round(t / record_interval), t / record_interval, tolerance = tolerance))) {
    print(round(t, 2))
  }
  t <- t + time_step
}

round(t / record_interval)会取最接近的整数,再通过all.equal()判断原比例与该整数的差值是否在容差范围内,自动覆盖所有接近整数倍的情况。

容差建议设置为time_step的0.1~1倍,既能覆盖浮点数累加的精度误差,又不会误判非目标时刻。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:35:17