nlme aarch64 float inequality : check fails
Yarl via R-help <[email protected]> Thu, 05 Feb 2026 18:52:25 +0100
| Newsgroups | gmane.comp.lang.r.general |
|---|---|
| Message-ID | <[email protected]> |
Dear R people,
Tests of nlme on aarch64 seem to fail:
--8<---------------cut here---------------start------------->8---
Running specific tests for package ‘nlme’
Running ‘anova.gls.R’
Error: running the tests in ‘anova.gls.R’ failed
Tests failed, dumping logs.
--- ./nlme-tests/anova.gls.Rout.fail ----------------------------------------
R version 4.5.2 (2025-10-31) -- "[Not] Part in a Rumble"
Copyright (C) 2025 The R Foundation for Statistical Computing
Platform: aarch64-unknown-linux-gnu
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> ## Example of scoping problem.
> ## Originally from a report by Markus Jantti:
> ## https://stat.ethz.ch/pipermail/r-help/2005-November/081382.html
> library(nlme)
> data(Ovary)
> ## stolen from example(anova.gls)
> # AR(1) errors within each Mare
> ## tolerance increased for flang (was 6e-6)
> fm1 <- gls(follicles ~ sin(2*pi*Time) + cos(2*pi*Time), Ovary,
+ correlation = corAR1(form = ~ 1 | Mare))
> int1 <- intervals(fm1)
> ## no longer print attr(,"label"), PR#18196 :
> writeLines(intOut <- capture.output(int1))
Approximate 95% confidence intervals
Coefficients:
lower est. upper
(Intercept) 10.908531 12.2163982 13.5242656
sin(2 * pi * Time) -4.044019 -2.7747122 -1.5054050
cos(2 * pi * Time) -2.272201 -0.8996047 0.4729919
Correlation structure:
lower est. upper
Phi 0.668414 0.7532079 0.8186747
Residual standard error:
lower est. upper
3.974642 4.616172 5.361248
> stopifnot({
+ length(grep(',"label"', intOut, fixed=TRUE)) == 0
+ all.equal(int1$corStruct["Phi",],
+ c(lower=0.66842829, est.=0.753207889, upper=0.81866619),
+ tol = 1e-5)# 7e-6 needed for flan
+ all.equal(as.vector(int1$sigma),
+ c(3.9747061, 4.61617157, 5.361161), tol = 1e-5)
+ })
Error: { .... is not TRUE
--8<---------------cut here---------------end--------------->8---
I got luck, I tried to compile with gcc's flag -ffp-contract=false, the
check then passed.
Question 1 : Is it known? I don't have other aarch64 boards at hand
(this one is rk3399 based).
Question 2 : If I build nlme with this flag and other packages
without it, should I expect problems? I am asking because I am trying to
upgrade the package definition in my gnu/linux distribution (Guix) in
order to support aarch64 (tests being required to pass).
Thank you!
Yarl