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