R Under development (unstable) (2026-02-10 r89394 ucrt) -- "Unsuffered Consequences" Copyright (C) 2026 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 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. > options(digits=12) > if(!require("BB"))stop("this test requires package BB.") Loading required package: BB > if(!require("setRNG"))stop("this test requires setRNG.") Loading required package: setRNG > > # Use a preset seed so test values are reproducable. > test.rng <- list(kind="Wichmann-Hill", normal.kind="Box-Muller", seed=c(979,1479,1542)) > old.seed <- setRNG(test.rng) > > ######################################################################################### > cat("BB test sc2 ...\n") BB test sc2 ... > > sc2.f <- function(x){ + n <- length(x) + vec <- 1:n + sum(vec * (exp(x) - x)) / 10 + } > > sc2.g <- function(x){ + n <- length(x) + vec <- 1:n + vec * (exp(x) - 1) / 10 + } > > neg.sc2.f <- function(x){ + n <- length(x) + vec <- 1:n + -sum(vec * (exp(x) - x)) / 10 + } > > neg.sc2.g <- function(x){ + n <- length(x) + vec <- 1:n + -vec * (exp(x) - 1) / 10 + } > > p0 <- runif(50, min=-1, max=1) > system.time(ans.spg <- spg(par=p0, fn=sc2.f, control=list(maxit=2500)))[1] iter: 0 f-value: 146.779401515 pgrad: 6.4342336259 iter: 10 f-value: 127.549313143 pgrad: 0.0927209953261 iter: 20 f-value: 127.500081307 pgrad: 0.00445695036433 iter: 30 f-value: 127.500010135 pgrad: 0.00782918618825 iter: 40 f-value: 127.500000364 pgrad: 0.000268727262664 iter: 50 f-value: 127.500000069 pgrad: 0.000470663508167 iter: 60 f-value: 127.500000001 pgrad: 1.67688085639e-05 user.self 0.04 > > z <- sum(ans.spg$par) > # -0.0002158022390025393 on Windows > # 0.001523050487259005 on Windows i386-pc-mingw32 (32-bit) R 2.13.0 (2011-04-13) > > good <- 0.0 > print(z, digits=16) [1] 8.634579194823975e-05 > if(any(abs(good - z) > 0.002)) stop("BB test sc2 a FAILED") > > system.time(neg.ans.spg <- spg(par=p0, fn=neg.sc2.f, + control=list(maxit=2500, maximize=TRUE)))[1] iter: 0 f-value: -146.779401515 pgrad: 6.4342336259 iter: 10 f-value: -127.549313143 pgrad: 0.0927209953261 iter: 20 f-value: -127.500081307 pgrad: 0.00445695036433 iter: 30 f-value: -127.500010135 pgrad: 0.00782918618825 iter: 40 f-value: -127.500000364 pgrad: 0.000268727262664 iter: 50 f-value: -127.500000069 pgrad: 0.000470663508167 iter: 60 f-value: -127.500000001 pgrad: 1.67688085639e-05 user.self 0.03 > > z <- sum(neg.ans.spg$par) > good <- 0.0 > print(z, digits=16) [1] 8.634579194823975e-05 > if(any(abs(good - z) > 0.002)) stop("BB test neg sc2 a FAILED") > > system.time(ans.spg <- spg(par=p0, fn=sc2.f, gr=sc2.g, + control=list(maxit=2500)))[1] iter: 0 f-value: 146.779401515 pgrad: 6.43423312745 iter: 10 f-value: 127.549313284 pgrad: 0.0927210622315 iter: 20 f-value: 127.500081364 pgrad: 0.00445940811854 iter: 30 f-value: 127.50001008 pgrad: 0.00775120103902 iter: 40 f-value: 127.500000378 pgrad: 0.000274037617116 iter: 50 f-value: 127.500000082 pgrad: 0.000575071127449 iter: 60 f-value: 127.500000003 pgrad: 2.37172189504e-05 user.self 0 > > z <- sum(ans.spg$par) > # 2.565413040899874e-06 Linux64 (mfacl2) > # 6.677493403589264e-05 Linux64 > # 0.0002100097368926836 i386-pc-solaris2.10 (32-bit) CRAN R 2.13.0 Patched (2011-04-15 r55454) > # 0.0006271870150276102 i386-apple-darwin9.8.0 (32-bit) CRAN R 2.13.0 Under development (unstable) (2011-03-07 r54691) > # 0.0005317982091112333 x86_64-unknown-linux-gnu (64-bit) CRAN fedora 2.14.0 Under development (unstable) (2011-04-14 r55450) > > good <- 0.0 > print(z, digits=16) [1] 0.0001064331461750847 > # test tol relaxed from 1e-4 to 1e-3 when ftol arg added to spg 2011.2-1 > if(any(abs(good - z) > 0.001)) stop("BB test sc2 b FAILED") > > system.time(neg.ans.spg <- spg(par=p0, fn=neg.sc2.f, gr=neg.sc2.g, + control=list(maxit=2500, maximize=TRUE)))[1] iter: 0 f-value: -146.779401515 pgrad: 6.43423312745 iter: 10 f-value: -127.549313284 pgrad: 0.0927210622315 iter: 20 f-value: -127.500081364 pgrad: 0.00445940811854 iter: 30 f-value: -127.50001008 pgrad: 0.00775120103902 iter: 40 f-value: -127.500000378 pgrad: 0.000274037617116 iter: 50 f-value: -127.500000082 pgrad: 0.000575071127449 iter: 60 f-value: -127.500000003 pgrad: 2.37172189504e-05 user.self 0 > > z <- sum(neg.ans.spg$par) > good <- 0.0 > print(z, digits=16) [1] 0.0001064331461750847 > # test tol relaxed from 1e-4 to 1e-3 when ftol arg added to spg 2011.2-1 > if(any(abs(good - z) > 0.001)) stop("BB test neg.sc2 b FAILED") > > > proc.time() user system elapsed 0.26 0.07 0.32