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

求元素间距至少为N的最大数字子集及浮点数取模异常解决

问题:获取元素间距至少为N的最大规模子集

核心需求

获取元素集合中,元素间距至少为N(N可为小数)的最大规模子集,输入输出示例如下:

1 2 3 4 5, spaced by 2
1 3 5 | 2 4

35 40 45 50 55 60 65 70 75, spaced by 10
35 45 55 65 75 | 40 50 60 70

37.5 39.5 40.5 57.7 62 76.3, spaced by 3.5
37.5 57.7 62 76.3 | 39.5 57.7 62 76.3

尝试方案及问题

尝试用split(vector, vector%%spacing)实现,但遇到浮点数取模异常:相同参数从data.frame第34行传入与直接传入函数时结果不同,复现代码如下:

calculate_solution <- function(parA, parB, parC, parD) {
  varA <- parA/2
  varB <- seq(from=varA+parB,to=parA-parB,by=parB)

  varC <- 1 / parC

  varD <- split(varB,varB%%varC)
  
  print(varD)
}

df_1 <- list(
  a=seq(from=75,to=85,by=5),
  b=seq(from=1,to=2.5,by=0.5),
  c=seq(from=0.05,to=0.4,by=0.05),
  d=seq(from=2,to=2,by=1)) %>%
  expand.grid()

print(c(df_1[34,]$a,df_1[34,]$b,df_1[34,]$c,df_1[34,]$d))

#[1] 75.00  2.50  0.15  2.00

calculate_solution(df_1[34,]$a,df_1[34,]$b,df_1[34,]$c,df_1[34,]$d)

#$`3.5527136788005e-15`
#[1] 40
#
#$`5.32907051820075e-15`
#[1] 60
#
#$`0.833333333333337`
#[1] 47.5
#
#$`0.833333333333339`
#[1] 67.5
#
#$`1.66666666666667`
#[1] 55
#
#$`2.5`
#[1] 42.5
#
#$`2.50000000000001`
#[1] 62.5
#
#$`3.33333333333334`
#[1] 50 70
#
#$`4.16666666666667`
#[1] 57.5
#
#$`5`
#[1] 45
#
#$`5.00000000000001`
#[1] 65
#
#$`5.83333333333334`
#[1] 52.5 72.5
#

df_2 <- data.frame(a=75.0,b=2.5,c=0.15,d=2.0)

calculate_solution(df_2[1,]$a,df_2[1,]$b,df_2[1,]$c,df_2[1,]$d)

#$`0.83333333333333`
#[1] 67.5
#
#$`0.833333333333331`
#[1] 47.5
#
#$`1.66666666666666`
#[1] 55
#
#$`2.5`
#[1] 42.5 62.5
#
#$`3.33333333333333`
#[1] 50 70
#
#$`4.16666666666666`
#[1] 57.5
#
#$`5`
#[1] 45 65
#
#$`5.83333333333333`
#[1] 52.5 72.5
#
#$`6.66666666666666`
#[1] 60
#
#$`6.66666666666667`
#[1] 40

寻求帮助

不排查浮点数取模异常的原因,希望得到:

  • 该问题的专业术语
  • 替代实现方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:25:25