Ponto flutuante e menor que igual após adição e subtração

Existe uma "melhor prática" comparações menores que iguais com o número de ponto flutuante após uma série de operações aritméticas de ponto flutuante?

Eu tenho o exemplo a seguir em R, embora a questão não se aplique apenas a R, mas a qualquer idioma que use pontos flutuantes. Eu tenho um duplox = 1 às quais aplico uma série de adições e subtrações. No finalx deve ser exatamente um, mas não se deve à aritmética de ponto flutuante (pelo que entendi). Aqui está o exemplo

> stop_times <- seq(0.25, 2, by = .25)
> expr <- expression(replicate(100,{
+   x <- 1
+   
+   for(i in 1:10){
+     tmp <- rexp(1, 1)
+     n <- sample.int(1e2, 1)
+     delta <- tmp / n
+     for(j in 1:n)
+       x <- x - delta
+     x <- x + tmp
+   }
+ 
+   # "correct" answer is 4  
+   which.max(x <= stop_times)
+ }))
> eval(expr)
  [1] 5 5 5 4 4 4 5 5 5 4 5 4 4 4 5 5 4 4 5 4 5 4 5 4 5 5 5 4 4 4 4 4 4 4 4 4 5 5 5 5 5 4 5 4 5 5 5 4 4 5 5 5 4 4 5 5 5 4 4 4 4 4 4
 [64] 5 4 4 4 5 5 5 4 4 4 5 4 4 4 4 4 4 4 4 5 5 5 5 4 4 4 5 5 5 5 5 4 4 4 5 5 4

Uma solução (ingênua?) É adicionar algum número positivo pequeno e arbitrário ao lado direito da desigualdade, da seguinte maneira

some_arbitrary_factor <- 100
stop_times <- seq(0.25, 2, by = .25) + 
  some_arbitrary_factor * .Machine$double.eps
eval(expr)
  [1] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 [64] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

Esta é a "melhor prática" e, em caso afirmativo, existem diretrizes sobre como escolhersome_arbitrary_factor?

Meu problema concreto é que tenho períodos de tempo $ (t_0, t_1], (t_1, t_2], \ dots $ e preciso definir em que período uma determinada observação é $ x $. $ X $ pode ter sido definido como um dos limites $ t_i $ depois de ter passado por uma série de operações aritméticas de ponto flutuante que devem resultar em $ t_i $ se a operação exata for executada.

questionAnswers(1)

yourAnswerToTheQuestion