seed <- 12345 set.seed(seed) ni <- 0:1000 m <- 100000 nr <- floor(runif(m, min=-500, max=1500)) + (2*runif(m) - 1)^7 # concentrates near integers min.err <- Inf # minimum inexact result for integer n max.err <- 0 # maximum error for real n xi <- rep(1, times=length(ni)) # exact values (Pascal triangle) xr <- rep(1, times=length(nr)) # R level computed values for (k in 0:200) { if (k %% 10 == 0) cat("k <=", k, "max err =", max.err, "\n") # check integer n yi <- choose(ni + k, k) min.err <- min(min.err, xi[xi != yi]) xi <- cumsum(xi) # prepare for the next k # check real n yr <- choose(nr, k) ind <- yr != 0 | xr != 0 max.err <- max(max.err, pmax(yr[ind]/xr[ind], xr[ind]/yr[ind]) - 1) xr <- xr*(nr - k)/(k + 1) # prepare for the next k } cat("minimum log2() of a wrong result for integer n :", log2(min.err), "\n") cat("maximum error for real n :", max.err, "\n")