It's an underflow problem. When comparing versions, "a.b.c" is converted first to the integer vector c(a,b,c) and then to the double precision value
a + b/base + c/base^2 where base is 1 greater than the largest integer component of any of the versions: i.e 999999912 in this case. The last term is then smaller than the machine precision so you can't tell the difference between 1.0.4 and 1.0.5. Martyn On Wed, 2013-10-02 at 23:41 -0400, Ben Bolker wrote: > Can anyone explain what I'm missing here? > > max(pp1 <- package_version(c("0.99999911.3","1.0.4","1.0.5"))) > ## [1] ‘1.0.4’ > > max(pp2 <- package_version(c("1.0.3","1.0.4","1.0.5"))) > ## [1] ‘1.0.5’ > > I've looked at ?package_version , to no avail. > > Since max() goes to .Primitive("max") > I'm having trouble figuring out where it goes from there: > I **think** this is related to ?xtfrm , which goes to > .encode_numeric_version, which is doing something I really > don't understand (it's in base/R/version.R ...) > > .encode_numeric_version(pp1) > ## [1] 1 1 1 > ## attr(,"base") > ## [1] 99999912 > ## attr(,"lens") > ## [1] 3 3 3 > ## attr(,".classes") > ## [1] "package_version" "numeric_version" > > .encode_numeric_version(pp2) > ## [1] 1.083333 1.111111 1.138889 > ## attr(,"base") > ## [1] 6 > ## attr(,"lens") > ## [1] 3 3 3 > ## attr(,".classes") > ## [1] "package_version" "numeric_version" > > sessionInfo() > R Under development (unstable) (2013-09-09 r63889) > Platform: i686-pc-linux-gnu (32-bit) > > [snip] > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > loaded via a namespace (and not attached): > [1] compiler_3.1.0 tools_3.1.0 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel