Dear List, while working on an update to my post on integrating over an infinite range using RcppNumerical [1] I have encountered erroneous behavior from integrate() when (at least) one of the limits is infinite and upper and lower limit are exchanged, i.e. upper < lower. For example, integrating dnorm with upper > lower works without problems: integrate(dnorm, 0.1, 1) #> 0.3015169 with absolute error < 3.3e-15 integrate(dnorm, 0.1, 10) #> 0.4601722 with absolute error < 6.2e-06 integrate(dnorm, 0.1, Inf) #> 0.4601722 with absolute error < 2.7e-05 If we interchange the limits, we get the expected negative value of the previous integrals as long as the limits are finite: integrate(dnorm, 1, 0.1) #> -0.3015169 with absolute error < 3.3e-15 integrate(dnorm, 10, 0.1) #> -0.4601722 with absolute error < 6.2e-06 But when the lower limit is Inf, the returned value is incorrect: integrate(dnorm, Inf, 0.1) #> 0.5398278 with absolute error < 7.5e-05 Instead of the expected -0.4601722, it is the value one would get when the lower limit were -Inf: integrate(dnorm, -Inf, 0.1) #> 0.5398278 with absolute error < 7.5e-05 Similar problems occur if the upper limit is -Inf. The reason seems to be that integrate() assumes that if is.finite() is false for lower then lower == -Inf (similarly for upper). Should this be fixed? Greetings Ralf [1] stubner.me/2019/07/numerical-integration-in-rcpp