求元素间距至少为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
相关产品推荐
相关产品推荐

