1 2R version 4.1.1 Patched (2021-10-12 r81047) -- "Kick Things" 3Copyright (C) 2021 The R Foundation for Statistical Computing 4Platform: x86_64-pc-linux-gnu (64-bit) 5 6R is free software and comes with ABSOLUTELY NO WARRANTY. 7You are welcome to redistribute it under certain conditions. 8Type 'license()' or 'licence()' for distribution details. 9 10R is a collaborative project with many contributors. 11Type 'contributors()' for more information and 12'citation()' on how to cite R or R packages in publications. 13 14Type 'demo()' for some demos, 'help()' for on-line help, or 15'help.start()' for an HTML browser interface to help. 16Type 'q()' to quit R. 17 18> ### Tests of complex arithemetic. 19> 20> Meps <- .Machine$double.eps 21> ## complex 22> z <- 0i ^ (-3:3) 23> stopifnot(Re(z) == 0 ^ (-3:3)) 24> 25> 26> ## powers, including complex ones 27> a <- -4:12 28> m <- outer(a +0i, b <- seq(-.5,2, by=.5), "^") 29> dimnames(m) <- list(paste(a), "^" = sapply(b,format)) 30> round(m,3) 31 ^ 32 -0.5 0 0.5 1 1.5 2 33 -4 0.000-0.500i 1+0i 0.000+2.000i -4+0i 0.000-8.000i 16+0i 34 -3 0.000-0.577i 1+0i 0.000+1.732i -3+0i 0.000-5.196i 9+0i 35 -2 0.000-0.707i 1+0i 0.000+1.414i -2+0i 0.000-2.828i 4+0i 36 -1 0.000-1.000i 1+0i 0.000+1.000i -1+0i 0.000-1.000i 1+0i 37 0 Inf+0.000i 1+0i 0.000+0.000i 0+0i 0.000+0.000i 0+0i 38 1 1.000+0.000i 1+0i 1.000+0.000i 1+0i 1.000+0.000i 1+0i 39 2 0.707+0.000i 1+0i 1.414+0.000i 2+0i 2.828+0.000i 4+0i 40 3 0.577+0.000i 1+0i 1.732+0.000i 3+0i 5.196+0.000i 9+0i 41 4 0.500+0.000i 1+0i 2.000+0.000i 4+0i 8.000+0.000i 16+0i 42 5 0.447+0.000i 1+0i 2.236+0.000i 5+0i 11.180+0.000i 25+0i 43 6 0.408+0.000i 1+0i 2.449+0.000i 6+0i 14.697+0.000i 36+0i 44 7 0.378+0.000i 1+0i 2.646+0.000i 7+0i 18.520+0.000i 49+0i 45 8 0.354+0.000i 1+0i 2.828+0.000i 8+0i 22.627+0.000i 64+0i 46 9 0.333+0.000i 1+0i 3.000+0.000i 9+0i 27.000+0.000i 81+0i 47 10 0.316+0.000i 1+0i 3.162+0.000i 10+0i 31.623+0.000i 100+0i 48 11 0.302+0.000i 1+0i 3.317+0.000i 11+0i 36.483+0.000i 121+0i 49 12 0.289+0.000i 1+0i 3.464+0.000i 12+0i 41.569+0.000i 144+0i 50> stopifnot(m[,as.character(0:2)] == cbind(1,a,a*a), 51+ # latter were only approximate 52+ all.equal(unname(m[,"0.5"]), 53+ sqrt(abs(a))*ifelse(a < 0, 1i, 1), 54+ tolerance = 20*Meps)) 55> 56> ## 2.10.0-2.12.1 got z^n wrong in the !HAVE_C99_COMPLEX case 57> z <- 0.2853725+0.3927816i 58> z2 <- z^(1:20) 59> z3 <- z^-(1:20) 60> z0 <- cumprod(rep(z, 20)) 61> stopifnot(all.equal(z2, z0), all.equal(z3, 1/z0)) 62> ## was z^3 had value z^2 .... 63> 64> ## fft(): 65> for(n in 1:30) cat("\nn=",n,":", round(fft(1:n), 8),"\n") 66 67n= 1 : 1+0i 68 69n= 2 : 3+0i -1+0i 70 71n= 3 : 6+0i -1.5+0.866025i -1.5-0.866025i 72 73n= 4 : 10+0i -2+2i -2+0i -2-2i 74 75n= 5 : 15+0i -2.5+3.440955i -2.5+0.812299i -2.5-0.812299i -2.5-3.440955i 76 77n= 6 : 21+0i -3+5.196152i -3+1.732051i -3+0i -3-1.732051i -3-5.196152i 78 79n= 7 : 28+0i -3.5+7.267825i -3.5+2.791157i -3.5+0.798852i -3.5-0.798852i -3.5-2.791157i -3.5-7.267825i 80 81n= 8 : 36+0i -4+9.656854i -4+4i -4+1.656854i -4+0i -4-1.656854i -4-4i -4-9.656854i 82 83n= 9 : 45+0i -4.5+12.36365i -4.5+5.362891i -4.5+2.598076i -4.5+0.793471i -4.5-0.793471i -4.5-2.598076i -4.5-5.362891i -4.5-12.36365i 84 85n= 10 : 55+0i -5+15.38842i -5+6.88191i -5+3.632713i -5+1.624598i -5+0i -5-1.624598i -5-3.632713i -5-6.88191i -5-15.38842i 86 87n= 11 : 66+0i -5.5+18.73128i -5.5+8.558167i -5.5+4.765777i -5.5+2.511766i -5.5+0.790781i -5.5-0.790781i -5.5-2.511766i -5.5-4.765777i -5.5-8.558167i -5.5-18.73128i 88 89n= 12 : 78+0i -6+22.3923i -6+10.3923i -6+6i -6+3.464102i -6+1.607695i -6+0i -6-1.607695i -6-3.464102i -6-6i -6-10.3923i -6-22.3923i 90 91n= 13 : 91+0i -6.5+26.37154i -6.5+12.38472i -6.5+7.336983i -6.5+4.486626i -6.5+2.465125i -6.5+0.789243i -6.5-0.789243i -6.5-2.465125i -6.5-4.486626i -6.5-7.336983i -6.5-12.38472i -6.5-26.37154i 92 93n= 14 : 105+0i -7+30.669i -7+14.53565i -7+8.777722i -7+5.582314i -7+3.371022i -7+1.597704i -7+0i -7-1.597704i -7-3.371022i -7-5.582314i -7-8.777722i -7-14.53565i -7-30.669i 94 95n= 15 : 120+0i -7.5+35.28473i -7.5+16.84528i -7.5+10.32286i -7.5+6.75303i -7.5+4.330127i -7.5+2.436898i -7.5+0.788282i -7.5-0.788282i -7.5-2.436898i -7.5-4.330127i -7.5-6.75303i -7.5-10.32286i -7.5-16.84528i -7.5-35.28473i 96 97n= 16 : 136+0i -8+40.21872i -8+19.31371i -8+11.97285i -8+8i -8+5.345429i -8+3.313709i -8+1.591299i -8+0i -8-1.591299i -8-3.313709i -8-5.345429i -8-8i -8-11.97285i -8-19.31371i -8-40.21872i 98 99n= 17 : 153+0i -8.5+45.47098i -8.5+21.94103i -8.5+13.72797i -8.5+9.324056i -8.5+6.418902i -8.5+4.232497i -8.5+2.418459i -8.5+0.787641i -8.5-0.787641i -8.5-2.418459i -8.5-4.232497i -8.5-6.418902i -8.5-9.324056i -8.5-13.72797i -8.5-21.94103i -8.5-45.47098i 100 101n= 18 : 171+0i -9+51.04154i -9+24.7273i -9+15.58846i -9+10.72578i -9+7.551897i -9+5.196152i -9+3.275732i -9+1.586943i -9+0i -9-1.586943i -9-3.275732i -9-5.196152i -9-7.551897i -9-10.72578i -9-15.58846i -9-24.7273i -9-51.04154i 102 103n= 19 : 190+0i -9.5+56.93038i -9.5+27.67255i -9.5+17.55446i -9.5+12.2056i -9.5+8.745366i -9.5+6.20666i -9.5+4.167086i -9.5+2.405727i -9.5+0.787192i -9.5-0.787192i -9.5-2.405727i -9.5-4.167086i -9.5-6.20666i -9.5-8.745366i -9.5-12.2056i -9.5-17.55446i -9.5-27.67255i -9.5-56.93038i 104 105n= 20 : 210+0i -10+63.13752i -10+30.77684i -10+19.62611i -10+13.76382i -10+10i -10+7.26543i -10+5.09525i -10+3.2492i -10+1.58384i -10+0i -10-1.58384i -10-3.2492i -10-5.09525i -10-7.26543i -10-10i -10-13.76382i -10-19.62611i -10-30.77684i -10-63.13752i 106 107n= 21 : 231+0i -10.5+69.66295i -10.5+34.04016i -10.5+21.80347i -10.5+15.40067i -10.5+11.31631i -10.5+8.37347i -10.5+6.06218i -10.5+4.12095i -10.5+2.39656i -10.5+0.78687i -10.5-0.78687i -10.5-2.39656i -10.5-4.12095i -10.5-6.06218i -10.5-8.37347i -10.5-11.31631i -10.5-15.40067i -10.5-21.80347i -10.5-34.04016i -10.5-69.66295i 108 109n= 22 : 253+0i -11+76.50668i -11+37.46256i -11+24.08664i -11+17.11633i -11+12.69468i -11+9.53155i -11+7.06927i -11+5.02353i -11+3.22989i -11+1.58156i -11+0i -11-1.58156i -11-3.22989i -11-5.02353i -11-7.06927i -11-9.53155i -11-12.69468i -11-17.11633i -11-24.08664i -11-37.46256i -11-76.50668i 110 111n= 23 : 276+0i -11.5+83.66871i -11.5+41.04404i -11.5+26.47566i -11.5+18.91094i -11.5+14.1354i -11.5+10.74025i -11.5+8.11759i -11.5+5.95882i -11.5+4.0871i -11.5+2.38973i -11.5+0.78662i -11.5-0.78662i -11.5-2.38973i -11.5-4.0871i -11.5-5.95882i -11.5-8.11759i -11.5-10.74025i -11.5-14.1354i -11.5-18.91094i -11.5-26.47566i -11.5-41.04404i -11.5-83.66871i 112 113n= 24 : 300+0i -12+91.14905i -12+44.78461i -12+28.97056i -12+20.78461i -12+15.6387i -12+12i -12+9.20792i -12+6.9282i -12+4.97056i -12+3.21539i -12+1.57983i -12+0i -12-1.57983i -12-3.21539i -12-4.97056i -12-6.9282i -12-9.20792i -12-12i -12-15.6387i -12-20.78461i -12-28.97056i -12-44.78461i -12-91.14905i 114 115n= 25 : 325+0i -12.5+98.94769i -12.5+48.68429i -12.5+31.5714i -12.5+22.73742i -12.5+17.20477i -12.5+13.31115i -12.5+10.3409i -12.5+7.93274i -12.5+5.88205i -12.5+4.0615i -12.5+2.3845i -12.5+0.78643i -12.5-0.78643i -12.5-2.3845i -12.5-4.0615i -12.5-5.88205i -12.5-7.93274i -12.5-10.3409i -12.5-13.31115i -12.5-17.20477i -12.5-22.73742i -12.5-31.5714i -12.5-48.68429i -12.5-98.94769i 116 117n= 26 : 351+0i -13+107.0646i -13+52.74307i -13+34.27818i -13+24.76943i -13+18.83375i -13+14.67397i -13+11.517i -13+8.97325i -13+6.82293i -13+4.93025i -13+3.20421i -13+1.57849i -13+0i -13-1.57849i -13-3.20421i -13-4.93025i -13-6.82293i -13-8.97325i -13-11.517i -13-14.67397i -13-18.83375i -13-24.76943i -13-34.27818i -13-52.74307i -13-107.0646i 118 119n= 27 : 378+0i -13.5+115.4999i -13.5+56.96098i -13.5+37.09095i -13.5+26.88071i -13.5+20.52575i -13.5+16.08867i -13.5+12.73659i -13.5+10.05038i -13.5+7.79423i -13.5+5.82333i -13.5+4.04163i -13.5+2.38041i -13.5+0.78629i -13.5-0.78629i -13.5-2.38041i -13.5-4.04163i -13.5-5.82333i -13.5-7.79423i -13.5-10.05038i -13.5-12.73659i -13.5-16.08867i -13.5-20.52575i -13.5-26.88071i -13.5-37.09095i -13.5-56.96098i -13.5-115.4999i 120 121n= 28 : 406+0i -14+124.2534i -14+61.33801i -14+40.0097i -14+29.0713i -14+22.28087i -14+17.55544i -14+14i -14+11.16463i -14+8.79678i -14+6.74204i -14+4.89881i -14+3.19541i -14+1.57742i -14+0i -14-1.57742i -14-3.19541i -14-4.89881i -14-6.74204i -14-8.79678i -14-11.16463i -14-14i -14-17.55544i -14-22.28087i -14-29.0713i -14-40.0097i -14-61.33801i -14-124.2534i 122 123n= 29 : 435+0i -14.5+133.3253i -14.5+65.87416i -14.5+43.03447i -14.5+31.34124i -14.5+24.09919i -14.5+19.07442i -14.5+15.30746i -14.5+12.31641i -14.5+9.83124i -14.5+7.68741i -14.5+5.77733i -14.5+4.02591i -14.5+2.37715i -14.5+0.78617i -14.5-0.78617i -14.5-2.37715i -14.5-4.02591i -14.5-5.77733i -14.5-7.68741i -14.5-9.83124i -14.5-12.31641i -14.5-15.30746i -14.5-19.07442i -14.5-24.09919i -14.5-31.34124i -14.5-43.03447i -14.5-65.87416i -14.5-133.3253i 124 125n= 30 : 465+0i -15+142.7155i -15+70.56945i -15+46.16525i -15+33.69055i -15+25.98076i -15+20.64573i -15+16.65919i -15+13.50606i -15+10.89814i -15+8.66025i -15+6.67843i -15+4.8738i -15+3.18835i -15+1.57656i -15+0i -15-1.57656i -15-3.18835i -15-4.8738i -15-6.67843i -15-8.66025i -15-10.89814i -15-13.50606i -15-16.65919i -15-20.64573i -15-25.98076i -15-33.69055i -15-46.16525i -15-70.56945i -15-142.7155i 126> 127> 128> ## polyroot(): 129> stopifnot(abs(1 + polyroot(choose(8, 0:8))) < 1e-10)# maybe smaller.. 130> 131> ## precision of complex numbers 132> signif(1.678932e80+0i, 5) 133[1] 1.6789e+80+0i 134> signif(1.678932e-300+0i, 5) 135[1] 1.6789e-300+0i 136> signif(1.678932e-302+0i, 5) 137[1] 1.6789e-302+0i 138> signif(1.678932e-303+0i, 5) 139[1] 1.6789e-303+0i 140> signif(1.678932e-304+0i, 5) 141[1] 1.6789e-304+0i 142> signif(1.678932e-305+0i, 5) 143[1] 1.6789e-305+0i 144> signif(1.678932e-306+0i, 5) 145[1] 1.6789e-306+0i 146> signif(1.678932e-307+0i, 5) 147[1] 1.6789e-307+0i 148> signif(1.678932e-308+0i, 5) 149[1] 1.6789e-308+0i 150> signif(1.678932-1.238276i, 5) 151[1] 1.6789-1.2383i 152> signif(1.678932-1.238276e-1i, 5) 153[1] 1.6789-0.1238i 154> signif(1.678932-1.238276e-2i, 5) 155[1] 1.6789-0.0124i 156> signif(1.678932-1.238276e-3i, 5) 157[1] 1.6789-0.0012i 158> signif(1.678932-1.238276e-4i, 5) 159[1] 1.6789-0.0001i 160> signif(1.678932-1.238276e-5i, 5) 161[1] 1.6789+0i 162> signif(8.678932-9.238276i, 5) 163[1] 8.6789-9.2383i 164> ## prior to 2.2.0 rounded real and imaginary parts separately. 165> 166> 167> ## Complex Trig.: 168> abs(Im(cos(acos(1i))) - 1) < 2*Meps 169[1] TRUE 170> abs(Im(sin(asin(1i))) - 1) < 2*Meps 171[1] TRUE 172> ##P (1 - Im(sin(asin(Ii))))/Meps 173> ##P (1 - Im(cos(acos(Ii))))/Meps 174> abs(Im(asin(sin(1i))) - 1) < 2*Meps 175[1] TRUE 176> all.equal(cos(1i), cos(-1i)) # i.e. Im(acos(*)) gives + or - 1i: 177[1] TRUE 178> abs(abs(Im(acos(cos(1i)))) - 1) < 4*Meps 179[1] TRUE 180> 181> 182> set.seed(123) # want reproducible output 183> Isi <- Im(sin(asin(1i + rnorm(100)))) 184> all(abs(Isi-1) < 100* Meps) 185[1] TRUE 186> ##P table(2*abs(Isi-1) / Meps) 187> Isi <- Im(cos(acos(1i + rnorm(100)))) 188> all(abs(Isi-1) < 100* Meps) 189[1] TRUE 190> ##P table(2*abs(Isi-1) / Meps) 191> Isi <- Im(atan(tan(1i + rnorm(100)))) #-- tan(atan(..)) does NOT work (Math!) 192> all(abs(Isi-1) < 100* Meps) 193[1] TRUE 194> ##P table(2*abs(Isi-1) / Meps) 195> 196> set.seed(123) 197> z <- complex(real = rnorm(100), imag = rnorm(100)) 198> stopifnot(Mod ( 1 - sin(z) / ( (exp(1i*z)-exp(-1i*z))/(2*1i) )) < 20 * Meps) 199> ## end of moved from complex.Rd 200> 201> 202> ## PR#7781 203> ## This is not as given by e.g. glibc on AMD64 204> (z <- tan(1+1000i)) # 0+1i from R's own code. 205[1] 0+1i 206> stopifnot(is.finite(z)) 207> ## 208> 209> 210> ## Branch cuts in complex inverse trig functions 211> atan(2) 212[1] 1.107149 213> atan(2+0i) 214[1] 1.107149+0i 215> tan(atan(2+0i)) 216[1] 2+0i 217> ## should not expect exactly 0i in result 218> round(atan(1.0001+0i), 7) 219[1] 0.7854482+0i 220> round(atan(0.9999+0i), 7) 221[1] 0.7853482+0i 222> ## previously not as in Abramowitz & Stegun. 223> 224> 225> ## typo in z_atan2. 226> (z <- atan2(0+1i, 0+0i)) 227[1] 1.570796+0i 228> stopifnot(all.equal(z, pi/2+0i)) 229> ## was NA in 2.1.1 230> 231> 232> ## Hyperbolic 233> x <- seq(-3, 3, len=200) 234> Meps <- .Machine$double.eps 235> stopifnot( 236+ Mod(cosh(x) - cos(1i*x)) < 20*Meps, 237+ Mod(sinh(x) - sin(1i*x)/1i) < 20*Meps 238+ ) 239> ## end of moved from Hyperbolic.Rd 240> 241> ## values near and on branch cuts 242> options(digits=5) 243> z <- c(2+0i, 2-0.0001i, -2+0i, -2+0.0001i) 244> asin(z) 245[1] 1.5708-1.317i 1.5707-1.317i -1.5708+1.317i -1.5707+1.317i 246> acos(z) 247[1] 0.0000+1.317i 0.0001+1.317i 3.1416-1.317i 3.1415-1.317i 248> atanh(z) 249[1] 0.5493-1.5708i 0.5493-1.5708i -0.5493+1.5708i -0.5493+1.5708i 250> z <- c(0+2i, 0.0001+2i, 0-2i, -0.0001i-2i) 251> asinh(z) 252[1] 1.317+1.5708i 1.317+1.5707i -1.317-1.5708i -1.317-1.5708i 253> acosh(z) 254[1] 1.4436+1.5708i 1.4436+1.5708i -1.4436+1.5708i -1.4437+1.5708i 255> atan(z) 256[1] 1.5708+0.5493i 1.5708+0.5493i -1.5708-0.5493i -1.5708-0.5493i 257> ## According to C99, should have continuity from the side given if there 258> ## are not signed zeros. 259> ## Both glibc 2.12 and macOS 10.6 used continuity from above in the first set 260> ## but they seem to assume signed zeros. 261> ## Windows gave incorrect (NaN) values on the cuts. 262> 263> stopifnot(identical(tanh(356+0i), 1+0i)) 264> ## Used to be NaN+0i on Windows 265> 266> ## Not a regression test, but rather one of the good cases: 267> (cNaN <- as.complex("NaN")) 268[1] NaN+0i 269> stopifnot(identical(cNaN, complex(re = NaN)), is.nan(Re(cNaN)), Im(cNaN) == 0) 270> dput(cNaN) ## (real = NaN, imaginary = 0) 271complex(real=NaN, imaginary=0) 272> ## Partly new behavior: 273> (c0NaN <- complex(real=0, im=NaN)) 274[1] 0+NaNi 275> (cNaNaN <- complex(re=NaN, im=NaN)) 276[1] NaN+NaNi 277> stopifnot(identical(cNaN, as.complex(NaN)), 278+ identical(vapply(c(cNaN, c0NaN, cNaNaN), format, ""), 279+ c("NaN+0i", "0+NaNi", "NaN+NaNi")), 280+ identical(cNaN, NaN + 0i), 281+ identical(cNaN, Conj(cNaN)), 282+ identical(cNaN, cNaN+cNaN), 283+ 284+ identical(cNaNaN, 1i * NaN), 285+ identical(cNaNaN, complex(modulus= NaN)), 286+ identical(cNaNaN, complex(argument= NaN)), 287+ identical(cNaNaN, complex(arg=NaN, mod=NaN)), 288+ 289+ identical(c0NaN, c0NaN+c0NaN), # ! 290+ ## Platform dependent, not TRUE e.g. on F21 gcc 4.9.2: 291+ ## identical(NA_complex_, NaN + NA_complex_ ) , 292+ ## Probably TRUE, but by a standard ?? 293+ ## identical(cNaNaN, 2 * c0NaN), # C-library arithmetic 294+ ## identical(cNaNaN, 2 * cNaN), # C-library arithmetic 295+ ## identical(cNaNaN, NA_complex_ * Inf), 296+ TRUE) 297> 298