# Why, when I calculate the skewness of a series with constants, do I not get NaN?

11 views (last 30 days)
Angelavtc on 11 Oct 2021
Commented: Cris LaPierre on 11 Oct 2021
Dear Matlab community,
I have a simulation of normally distributed numbers with a mean of 76 and a standard deviation of 0, which describes a series of constant numbers with the value 76. To this simulation, I apply a function that also yields constants and, therefore, its skewness should be also NaN. Why, when I calculate their skewness, do I not get NaN but 1? How do I correct this error?
Np=20;
cb=2;
ab = 30*(Np/100)^(cb-1);
n=100;
Qd = normrnd(76,0,n,1);
Pw=ab*((Qd/Np).^(cb-1));
skewness(Pw)
skewness(Qd)
var(Qd)

Cris LaPierre on 11 Oct 2021
I suspect this has to do with how floating point numbers are stored in a computer. 76 can be stored exactly as is, but 22.8000 is not exactly 22.8 in your computer. If you round Pw, you will see the skewness is also NaN.
format long
Np=20;
cb=2;
ab = 30*(Np/100)^(cb-1);
Qd = normrnd(76,0,100,1);
Pw=ab*((Qd/Np).^(cb-1));
Pw(1)
ans =
22.799999999999997
skewness(Pw)
ans =
-1
var(Pw)
ans =
1.274926715508706e-29
skewness(round(Pw))
ans =
NaN
skewness(Qd)
ans =
NaN
var(Qd)
ans =
0
Cris LaPierre on 11 Oct 2021
Consider taking a look at the algorithm the skewness function is using.