[R] Understanding and predict round-off errors sign on simple functions

c.jallet at laposte.net c.jallet at laposte.net
Wed Jun 29 11:55:55 CEST 2016


Hi,

 

May be it is a basic thing but I would like to know if we can anticipate
round-off errors sign.

 

Here is an example :

 

# numerical matrix

m <- matrix(data=cbind(rnorm(10, 0), rnorm(10, 2), rnorm(10, 5)), nrow=10,
ncol=3)

 

> m

            [,1]      [,2]     [,3]

[1,]  0.4816247 1.1973502 3.855641

[2,] -1.2174937 0.7356427 4.393279

[3,]  0.8504074 2.5286509 2.689196

[4,]  1.8048642 1.8580804 6.665237

[5,] -0.6749397 1.0944277 4.838608

[6,]  0.8252034 1.5595268 3.681695

[7,]  1.3002208 0.9582693 4.561577

[8,]  1.6950923 3.5677921 6.005078

[9,]  0.6509285 0.9025964 5.082288

[10,] -0.5676040 1.3281102 4.446451

 

#weird moving average of period 1 !

mma <- apply(m, 2, SMA, n=1)

 

> mma

            [,1]      [,2]     [,3]

[1,]         NA        NA       NA

[2,] -1.2174937 0.7356427 4.393279

[3,]  0.8504074 2.5286509 2.689196

[4,]  1.8048642 1.8580804 6.665237

[5,] -0.6749397 1.0944277 4.838608

[6,]  0.8252034 1.5595268 3.681695

[7,]  1.3002208 0.9582693 4.561577

[8,]  1.6950923 3.5677921 6.005078

[9,]  0.6509285 0.9025964 5.082288

[10,] -0.5676040 1.3281102 4.446451

 

 

#difference should be 0 but here is the result

> m - mma 

               [,1]         [,2]          [,3]

[1,]            NA           NA            NA

[2,]  0.000000e+00 0.000000e+00 -8.881784e-16

[3,]  0.000000e+00 0.000000e+00 -8.881784e-16

[4,]  0.000000e+00 4.440892e-16 -8.881784e-16

[5,] -1.110223e-16 4.440892e-16 -8.881784e-16

[6,] -1.110223e-16 2.220446e-16 -4.440892e-16

[7,] -2.220446e-16 2.220446e-16  0.000000e+00

[8,] -2.220446e-16 0.000000e+00  0.000000e+00

[9,] -3.330669e-16 2.220446e-16 -8.881784e-16

[10,] -3.330669e-16 4.440892e-16 -8.881784e-16

 

SMA function use runMean 

# TTR / R / MovingAverages.R 

"SMA" <- function(x, n=10, ...) { # Simple Moving Average 

   ma <- runMean( x, n ) 

   if(!is.null(dim(ma))) { 

     colnames(ma) <- "SMA" 

   } 

  return(ma) 

}

 

 

Can anyone explain me that round error type?  

Is it possible to reproduce this same error generation in another language
like C++ or C# ?

 

Thanks in advance for your answers

 

Regards

 

Chris

 


	[[alternative HTML version deleted]]



More information about the R-help mailing list