[FFmpeg-devel] avutil/tests/lfg.c: added proper normality test

Submitted by Thomas Turner on March 8, 2017, 12:36 a.m.

Details

Message ID 1488933375-30762-1-git-send-email-thomastdt@googlemail.com
State Accepted
Headers show

Commit Message

Thomas Turner March 8, 2017, 12:36 a.m.
The Chen-Shapiro(CS) test was used to test normality for
Lagged Fibonacci PRNG.

Normality Hypothesis Test:

The null hypothesis formally tests if the population
the sample represents is normally-distributed. For
CS, when the normality hypothesis is True, the
distribution of QH will have a mean close to 1.

Information on CS can be found here:

http://www.stata-journal.com/sjpdf.html?articlenum=st0264
http://www.originlab.com/doc/Origin-Help/NormalityTest-Algorithm

Signed-off-by: Thomas Turner <thomastdt@googlemail.com>
---
 libavutil/tests/lfg.c    |  164 +++++++-
 tests/fate/libavutil.mak |    4 +
 tests/ref/fate/lfg       | 1007 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 1153 insertions(+), 22 deletions(-)
 create mode 100644 tests/ref/fate/lfg

Comments

Michael Niedermayer March 8, 2017, 1:45 p.m.
On Tue, Mar 07, 2017 at 04:36:15PM -0800, Thomas Turner wrote:
> The Chen-Shapiro(CS) test was used to test normality for
> Lagged Fibonacci PRNG.
> 
> Normality Hypothesis Test:
> 
> The null hypothesis formally tests if the population
> the sample represents is normally-distributed. For
> CS, when the normality hypothesis is True, the
> distribution of QH will have a mean close to 1.
> 
> Information on CS can be found here:
> 
> http://www.stata-journal.com/sjpdf.html?articlenum=st0264
> http://www.originlab.com/doc/Origin-Help/NormalityTest-Algorithm
> 
> Signed-off-by: Thomas Turner <thomastdt@googlemail.com>
> ---
>  libavutil/tests/lfg.c    |  164 +++++++-
>  tests/fate/libavutil.mak |    4 +
>  tests/ref/fate/lfg       | 1007 ++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 1153 insertions(+), 22 deletions(-)
>  create mode 100644 tests/ref/fate/lfg

applied

thx

[...]

Patch hide | download patch | download mbox

diff --git a/libavutil/tests/lfg.c b/libavutil/tests/lfg.c
index 1425e02..ad3b491 100644
--- a/libavutil/tests/lfg.c
+++ b/libavutil/tests/lfg.c
@@ -20,6 +20,85 @@ 
 #include "libavutil/timer.h"
 #include "libavutil/lfg.h"
 
+static const double Z_TABLE[31][10] = {
+    {0.5000,  0.5040,  0.5080,  0.5120,  0.5160,  0.5199,  0.5239,  0.5279,  0.5319,  0.5359},
+    {0.5398,  0.5438,  0.5478,  0.5517,  0.5557,  0.5596,  0.5636,  0.5675,  0.5714,  0.5753},
+    {0.5793,  0.5832,  0.5871,  0.5910,  0.5948,  0.5987,  0.6026,  0.6064,  0.6103,  0.6141},
+    {0.6179,  0.6217,  0.6255,  0.6293,  0.6331,  0.6368,  0.6406,  0.6443,  0.6480,  0.6517},
+    {0.6554,  0.6591,  0.6628,  0.6664,  0.6700,  0.6736,  0.6772,  0.6808,  0.6844,  0.6879},
+    {0.6915,  0.6950,  0.6985,  0.7019,  0.7054,  0.7088,  0.7123,  0.7157,  0.7190,  0.7224},
+    {0.7257,  0.7291,  0.7324,  0.7357,  0.7389,  0.7422,  0.7454,  0.7486,  0.7517,  0.7549},
+    {0.7580,  0.7611,  0.7642,  0.7673,  0.7704,  0.7734,  0.7764,  0.7794,  0.7823,  0.7852},
+    {0.7881,  0.7910,  0.7939,  0.7967,  0.7995,  0.8023,  0.8051,  0.8078,  0.8106,  0.8133},
+    {0.8159,  0.8186,  0.8212,  0.8238,  0.8264,  0.8289,  0.8315,  0.8340,  0.8365,  0.8389},
+    {0.8413,  0.8438,  0.8461,  0.8485,  0.8508,  0.8531,  0.8554,  0.8577,  0.8599,  0.8621},
+    {0.8643,  0.8665,  0.8686,  0.8708,  0.8729,  0.8749,  0.8770,  0.8790,  0.8810,  0.8830},
+    {0.8849,  0.8869,  0.8888,  0.8907,  0.8925,  0.8944,  0.8962,  0.8980,  0.8997,  0.9015},
+    {0.9032,  0.9049,  0.9066,  0.9082,  0.9099,  0.9115,  0.9131,  0.9147,  0.9162,  0.9177},
+    {0.9192,  0.9207,  0.9222,  0.9236,  0.9251,  0.9265,  0.9279,  0.9292,  0.9306,  0.9319},
+    {0.9332,  0.9345,  0.9357,  0.9370,  0.9382,  0.9394,  0.9406,  0.9418,  0.9429,  0.9441},
+    {0.9452,  0.9463,  0.9474,  0.9484,  0.9495,  0.9505,  0.9515,  0.9525,  0.9535,  0.9545},
+    {0.9554,  0.9564,  0.9573,  0.9582,  0.9591,  0.9599,  0.9608,  0.9616,  0.9625,  0.9633},
+    {0.9641,  0.9649,  0.9656,  0.9664,  0.9671,  0.9678,  0.9686,  0.9693,  0.9699,  0.9706},
+    {0.9713,  0.9719,  0.9726,  0.9732,  0.9738,  0.9744,  0.9750,  0.9756,  0.9761,  0.9767},
+    {0.9772,  0.9778,  0.9783,  0.9788,  0.9793,  0.9798,  0.9803,  0.9808,  0.9812,  0.9817},
+    {0.9821,  0.9826,  0.9830,  0.9834,  0.9838,  0.9842,  0.9846,  0.9850,  0.9854,  0.9857},
+    {0.9861,  0.9864,  0.9868,  0.9871,  0.9875,  0.9878,  0.9881,  0.9884,  0.9887,  0.9890},
+    {0.9893,  0.9896,  0.9898,  0.9901,  0.9904,  0.9906,  0.9909,  0.9911,  0.9913,  0.9916},
+    {0.9918,  0.9920,  0.9922,  0.9925,  0.9927,  0.9929,  0.9931,  0.9932,  0.9934,  0.9936},
+    {0.9938,  0.9940,  0.9941,  0.9943,  0.9945,  0.9946,  0.9948,  0.9949,  0.9951,  0.9952},
+    {0.9953,  0.9955,  0.9956,  0.9957,  0.9959,  0.9960,  0.9961,  0.9962,  0.9963,  0.9964},
+    {0.9965,  0.9966,  0.9967,  0.9968,  0.9969,  0.9970,  0.9971,  0.9972,  0.9973,  0.9974},
+    {0.9974,  0.9975,  0.9976,  0.9977,  0.9977,  0.9978,  0.9979,  0.9979,  0.9980,  0.9981},
+    {0.9981,  0.9982,  0.9982,  0.9983,  0.9984,  0.9984,  0.9985,  0.9985,  0.9986,  0.9986},
+    {0.9987,  0.9987,  0.9987,  0.9988,  0.9988,  0.9989,  0.9989,  0.9989,  0.9990,  0.9990} };
+
+// Inverse cumulative distribution function
+static double inv_cdf(double u)
+{
+    const double a[4] = { 2.50662823884,
+                         -18.61500062529,
+                          41.39119773534,
+                         -25.44106049637};
+
+    const double b[4] = {-8.47351093090,
+                          23.08336743743,
+                         -21.06224101826,
+                           3.13082909833};
+
+    const double c[9] = {0.3374754822726147,
+                          0.9761690190917186,
+                          0.1607979714918209,
+                          0.0276438810333863,
+                          0.0038405729373609,
+                          0.0003951896511919,
+                          0.0000321767881768,
+                          0.0000002888167364,
+                          0.0000003960315187};
+
+    double r;
+    double x = u - 0.5;
+
+    // Beasley-Springer
+     if (fabs(x) < 0.42) {
+
+        double y = x * x;
+        r        = x * (((a[3]*y+a[2])*y+a[1])*y+a[0]) /
+                        ((((b[3]*y+b[2])*y+b[1])*y+b[0])*y+1.0);
+    }
+    else {// Moro
+        r = u;
+        if (x > 0.0)
+            r = 1.0 - u;
+        r = log(-log(r));
+        r = c[0] + r*(c[1]+r*(c[2]+r*(c[3]+r*(c[4]+r*(c[5]+r*(c[6]+
+                                                        r*(c[7]+r*c[8])))))));
+        if (x < 0.0)
+            r = -r;
+    }
+
+    return r;
+}
 int main(void)
 {
     int x = 0;
@@ -41,34 +120,75 @@  int main(void)
     {
         double mean   = 1000;
         double stddev = 53;
-        double samp_mean = 0.0, samp_stddev = 0.0;
-        double samp0, samp1;
+        double samp_mean = 0.0, samp_stddev = 0.0, QH = 0;
+        double Z, p_value = -1, tot_samp = 1000;
+        double *PRN_arr = av_malloc_array(tot_samp, sizeof(double));
 
-        av_lfg_init(&state, 42);
+        if (!PRN_arr) {
+            fprintf(stderr, "failed to allocate memory!\n");
+            return 1;
+        }
 
-        for (i = 0; i < 1000; i += 2) {
+        av_lfg_init(&state, 42);
+        for (i = 0; i < tot_samp; i += 2) {
             double bmg_out[2];
             av_bmg_get(&state, bmg_out);
-            samp0 = bmg_out[0] * stddev + mean;
-            samp1 = bmg_out[1] * stddev + mean;
-            samp_mean += samp0 + samp1;
-            samp_stddev += samp0 * samp0 + samp1 * samp1;
-            av_log(NULL, AV_LOG_INFO,
-                   "%f\n%f\n",
-                   samp0,
-                   samp1);
+            PRN_arr[i  ] = bmg_out[0] * stddev + mean;
+            PRN_arr[i+1] = bmg_out[1] * stddev + mean;
+            samp_mean   += PRN_arr[i] + PRN_arr[i+1];
+            samp_stddev += PRN_arr[i] * PRN_arr[i] + PRN_arr[i+1] * PRN_arr[i+1];
+            printf("PRN%d : %f\n"
+                   "PRN%d : %f\n",
+                   i, PRN_arr[i], i+1, PRN_arr[i+1]);
         }
-        /* TODO: add proper normality test */
-        samp_mean /= 1000;
-        samp_stddev /= 999;
-        samp_stddev -= (1000.0/999.0)*samp_mean*samp_mean;
+        samp_mean /= tot_samp;
+        samp_stddev /= (tot_samp - 1);
+        samp_stddev -= (tot_samp * 1.0 / (tot_samp - 1))*samp_mean*samp_mean;
         samp_stddev = sqrt(samp_stddev);
-        av_log(NULL, AV_LOG_INFO, "sample mean  : %f\n"
-                                  "true mean    : %f\n"
-                                  "sample stddev: %f\n"
-                                  "true stddev  : %f\n",
-                                   samp_mean, mean, samp_stddev, stddev);
-    }
+        Z = (mean - samp_mean) / (stddev / sqrt(tot_samp));
+        {
+            int x, y, a, b, flag = 0;
+
+            if (Z < 0.0) {
+                flag = !flag;
+                Z = Z * -1.0;
+            }
+
+            a = (int)(Z * 100);
+            b = ((int)Z * 100);
+            x = Z * 10;
+            y = (b > 0) ? a % b : a;
+            y = y % 10;
+            if (x > 30 || y > 9) {
+                av_log(NULL, AV_LOG_INFO, "error: out of bounds! tried to access"
+                                          "Z_TABLE[%d][%d]\n", x, y);
+                goto SKIP;
+            }
+            p_value = flag ? 1 - Z_TABLE[x][y] : Z_TABLE[x][y];
+        }
 
+SKIP:   for (i = 0; i < tot_samp; ++i) {
+
+            if ( i < (tot_samp - 1)) {
+                double H_diff;
+                H_diff  = inv_cdf((i + 2.0 - (3.0/8.0)) / (tot_samp + (1.0/4.0)));
+                H_diff -= inv_cdf((i + 1.0 - (3.0/8.0)) / (tot_samp + (1.0/4.0)));
+
+                QH     += ((PRN_arr[i + 1] - PRN_arr[i]) / H_diff);
+            }
+        }
+        QH = 1.0 - QH / ((tot_samp - 1.0) * samp_stddev);
+
+        printf("sample mean  : %lf\n"
+               "true mean    : %lf\n"
+               "sample stddev: %lf\n"
+               "true stddev  : %lf\n"
+               "z-score      : %lf\n"
+               "p-value      : %lf\n"
+               "QH[normality]: %lf\n",
+               samp_mean, mean, samp_stddev, stddev, Z, p_value, QH);
+
+        av_freep(&PRN_arr);
+    }
     return 0;
 }
diff --git a/tests/fate/libavutil.mak b/tests/fate/libavutil.mak
index a7bf739..2e3830e 100644
--- a/tests/fate/libavutil.mak
+++ b/tests/fate/libavutil.mak
@@ -101,6 +101,10 @@  FATE_LIBAVUTIL += fate-imgutils
 fate-imgutils: libavutil/tests/imgutils$(EXESUF)
 fate-imgutils: CMD = run libavutil/tests/imgutils
 
+FATE_LIBAVUTIL += fate-lfg
+fate-lfg: libavutil/tests/lfg$(EXESUF)
+fate-lfg: CMD = run libavutil/tests/lfg
+
 FATE_LIBAVUTIL += fate-md5
 fate-md5: libavutil/tests/md5$(EXESUF)
 fate-md5: CMD = run libavutil/tests/md5
diff --git a/tests/ref/fate/lfg b/tests/ref/fate/lfg
new file mode 100644
index 0000000..2d00f4d
--- /dev/null
+++ b/tests/ref/fate/lfg
@@ -0,0 +1,1007 @@ 
+PRN0 : 993.985459
+PRN1 : 1033.987435
+PRN2 : 1047.662570
+PRN3 : 1063.912250
+PRN4 : 991.171781
+PRN5 : 981.734708
+PRN6 : 970.361179
+PRN7 : 998.599410
+PRN8 : 1001.562108
+PRN9 : 1094.675286
+PRN10 : 1026.730733
+PRN11 : 1001.794662
+PRN12 : 1063.992962
+PRN13 : 1003.176291
+PRN14 : 975.451418
+PRN15 : 963.164272
+PRN16 : 1035.042964
+PRN17 : 936.289221
+PRN18 : 1031.696061
+PRN19 : 1033.960882
+PRN20 : 970.449088
+PRN21 : 910.742009
+PRN22 : 1062.832837
+PRN23 : 972.315035
+PRN24 : 1094.553302
+PRN25 : 1004.366061
+PRN26 : 1067.940967
+PRN27 : 954.763340
+PRN28 : 923.089263
+PRN29 : 1053.286222
+PRN30 : 1012.639887
+PRN31 : 948.568149
+PRN32 : 1027.339362
+PRN33 : 953.080426
+PRN34 : 1035.425106
+PRN35 : 966.976740
+PRN36 : 1064.841657
+PRN37 : 904.714740
+PRN38 : 1054.112231
+PRN39 : 986.084454
+PRN40 : 964.995134
+PRN41 : 1064.898415
+PRN42 : 1049.385860
+PRN43 : 946.010664
+PRN44 : 914.563520
+PRN45 : 1054.057798
+PRN46 : 921.007266
+PRN47 : 1055.600575
+PRN48 : 984.003285
+PRN49 : 1064.479044
+PRN50 : 989.128936
+PRN51 : 972.772486
+PRN52 : 1028.824527
+PRN53 : 948.999392
+PRN54 : 926.982512
+PRN55 : 1028.107269
+PRN56 : 1018.971292
+PRN57 : 979.049159
+PRN58 : 1078.652930
+PRN59 : 1059.268785
+PRN60 : 966.062302
+PRN61 : 952.298249
+PRN62 : 965.484659
+PRN63 : 957.131298
+PRN64 : 1101.631483
+PRN65 : 991.328207
+PRN66 : 947.868071
+PRN67 : 977.329736
+PRN68 : 1039.860026
+PRN69 : 1005.357641
+PRN70 : 926.524754
+PRN71 : 1065.337110
+PRN72 : 1016.266500
+PRN73 : 1005.771115
+PRN74 : 1013.342260
+PRN75 : 1016.421157
+PRN76 : 918.857846
+PRN77 : 1084.126406
+PRN78 : 1013.273197
+PRN79 : 1009.859699
+PRN80 : 953.978276
+PRN81 : 966.195381
+PRN82 : 966.041526
+PRN83 : 1034.313935
+PRN84 : 1028.006502
+PRN85 : 988.667994
+PRN86 : 951.447243
+PRN87 : 950.197401
+PRN88 : 1004.492867
+PRN89 : 1018.726549
+PRN90 : 1002.135383
+PRN91 : 1015.553223
+PRN92 : 968.825638
+PRN93 : 909.251629
+PRN94 : 927.430200
+PRN95 : 1026.839173
+PRN96 : 1001.209732
+PRN97 : 903.997372
+PRN98 : 1029.582853
+PRN99 : 998.221588
+PRN100 : 874.533368
+PRN101 : 1008.158727
+PRN102 : 1064.130097
+PRN103 : 1020.425429
+PRN104 : 914.904591
+PRN105 : 1050.711960
+PRN106 : 1019.491585
+PRN107 : 968.062305
+PRN108 : 946.755388
+PRN109 : 1012.508705
+PRN110 : 997.922624
+PRN111 : 962.447265
+PRN112 : 1065.410496
+PRN113 : 1059.470790
+PRN114 : 1036.427789
+PRN115 : 963.516351
+PRN116 : 970.000982
+PRN117 : 978.030226
+PRN118 : 1041.883687
+PRN119 : 924.311759
+PRN120 : 987.574757
+PRN121 : 1020.188441
+PRN122 : 979.109616
+PRN123 : 1076.652961
+PRN124 : 905.994009
+PRN125 : 999.425282
+PRN126 : 1012.521111
+PRN127 : 893.443447
+PRN128 : 978.578327
+PRN129 : 1068.476732
+PRN130 : 960.687195
+PRN131 : 954.211448
+PRN132 : 1031.587651
+PRN133 : 1069.561334
+PRN134 : 948.293168
+PRN135 : 999.185195
+PRN136 : 967.284970
+PRN137 : 1004.112868
+PRN138 : 989.683149
+PRN139 : 1008.154639
+PRN140 : 1043.953748
+PRN141 : 1082.131379
+PRN142 : 1006.528611
+PRN143 : 942.893040
+PRN144 : 1120.072970
+PRN145 : 908.369273
+PRN146 : 1039.338207
+PRN147 : 1011.429056
+PRN148 : 1058.020374
+PRN149 : 1007.346274
+PRN150 : 916.830032
+PRN151 : 1000.237008
+PRN152 : 977.470622
+PRN153 : 985.066693
+PRN154 : 1020.675449
+PRN155 : 1026.074199
+PRN156 : 1087.961390
+PRN157 : 993.836698
+PRN158 : 1008.510268
+PRN159 : 1013.336576
+PRN160 : 1022.611211
+PRN161 : 996.211550
+PRN162 : 1025.772152
+PRN163 : 1058.268017
+PRN164 : 911.997787
+PRN165 : 1052.556722
+PRN166 : 998.536098
+PRN167 : 915.837410
+PRN168 : 979.313138
+PRN169 : 1045.691152
+PRN170 : 1018.832329
+PRN171 : 1086.959291
+PRN172 : 1065.875576
+PRN173 : 1018.341432
+PRN174 : 1101.511906
+PRN175 : 1130.164468
+PRN176 : 1043.232574
+PRN177 : 1086.907863
+PRN178 : 1025.378136
+PRN179 : 999.601323
+PRN180 : 1036.776794
+PRN181 : 988.653272
+PRN182 : 973.274518
+PRN183 : 1000.807655
+PRN184 : 1057.386211
+PRN185 : 960.735035
+PRN186 : 904.872645
+PRN187 : 889.117280
+PRN188 : 983.809186
+PRN189 : 912.874411
+PRN190 : 975.589269
+PRN191 : 948.421999
+PRN192 : 947.657566
+PRN193 : 950.000738
+PRN194 : 962.922561
+PRN195 : 1026.301488
+PRN196 : 1029.353812
+PRN197 : 1047.303674
+PRN198 : 1028.695557
+PRN199 : 1070.200632
+PRN200 : 947.575145
+PRN201 : 876.904616
+PRN202 : 1017.701430
+PRN203 : 1049.267498
+PRN204 : 958.139948
+PRN205 : 967.417379
+PRN206 : 968.274143
+PRN207 : 1000.864388
+PRN208 : 1066.802181
+PRN209 : 1014.463051
+PRN210 : 1026.799870
+PRN211 : 1018.450824
+PRN212 : 988.633963
+PRN213 : 904.749119
+PRN214 : 937.323052
+PRN215 : 1037.391158
+PRN216 : 1026.099281
+PRN217 : 907.667691
+PRN218 : 1010.454766
+PRN219 : 1019.473463
+PRN220 : 1005.177530
+PRN221 : 997.361757
+PRN222 : 954.628248
+PRN223 : 1061.917463
+PRN224 : 1039.311045
+PRN225 : 983.843948
+PRN226 : 968.679422
+PRN227 : 970.518863
+PRN228 : 963.038929
+PRN229 : 1086.210292
+PRN230 : 1022.961948
+PRN231 : 964.149961
+PRN232 : 949.462428
+PRN233 : 959.221279
+PRN234 : 987.151293
+PRN235 : 959.017697
+PRN236 : 996.893693
+PRN237 : 965.063094
+PRN238 : 1000.468116
+PRN239 : 1004.755878
+PRN240 : 995.674256
+PRN241 : 996.723454
+PRN242 : 966.714381
+PRN243 : 992.601460
+PRN244 : 1041.656776
+PRN245 : 1061.690153
+PRN246 : 1103.650456
+PRN247 : 1055.668922
+PRN248 : 1052.582092
+PRN249 : 953.461917
+PRN250 : 1006.433285
+PRN251 : 955.606772
+PRN252 : 1039.688043
+PRN253 : 1088.653591
+PRN254 : 942.093968
+PRN255 : 1031.071161
+PRN256 : 946.110148
+PRN257 : 932.761874
+PRN258 : 1052.693974
+PRN259 : 1008.479381
+PRN260 : 1063.720881
+PRN261 : 992.478541
+PRN262 : 915.981089
+PRN263 : 992.027282
+PRN264 : 1024.266535
+PRN265 : 919.165065
+PRN266 : 1010.516440
+PRN267 : 997.213969
+PRN268 : 1021.925225
+PRN269 : 978.883278
+PRN270 : 981.515166
+PRN271 : 980.281886
+PRN272 : 1053.161093
+PRN273 : 912.521231
+PRN274 : 953.132131
+PRN275 : 1004.643842
+PRN276 : 1058.794186
+PRN277 : 984.215138
+PRN278 : 1042.304270
+PRN279 : 972.388973
+PRN280 : 1033.185530
+PRN281 : 969.133442
+PRN282 : 1027.169707
+PRN283 : 1061.483306
+PRN284 : 960.680868
+PRN285 : 1001.272929
+PRN286 : 1017.813674
+PRN287 : 983.331085
+PRN288 : 932.052156
+PRN289 : 1004.348693
+PRN290 : 1086.961051
+PRN291 : 1038.181141
+PRN292 : 1050.191404
+PRN293 : 997.767778
+PRN294 : 1080.797673
+PRN295 : 976.782991
+PRN296 : 1031.633723
+PRN297 : 1011.128806
+PRN298 : 1008.380640
+PRN299 : 1087.552272
+PRN300 : 962.484066
+PRN301 : 942.301619
+PRN302 : 983.039469
+PRN303 : 962.689056
+PRN304 : 947.296230
+PRN305 : 1070.666154
+PRN306 : 1032.115321
+PRN307 : 1021.567324
+PRN308 : 953.506490
+PRN309 : 1002.026680
+PRN310 : 1008.181860
+PRN311 : 1025.392684
+PRN312 : 968.955019
+PRN313 : 1049.458891
+PRN314 : 957.676990
+PRN315 : 1035.683512
+PRN316 : 1112.131175
+PRN317 : 1055.138933
+PRN318 : 1078.236814
+PRN319 : 1125.693872
+PRN320 : 1022.131166
+PRN321 : 1116.997957
+PRN322 : 1089.131000
+PRN323 : 1077.159289
+PRN324 : 945.536432
+PRN325 : 1075.404651
+PRN326 : 946.487332
+PRN327 : 1024.258871
+PRN328 : 1031.225842
+PRN329 : 1016.780255
+PRN330 : 1103.910936
+PRN331 : 1000.846691
+PRN332 : 984.532087
+PRN333 : 1005.306673
+PRN334 : 1113.067840
+PRN335 : 964.786705
+PRN336 : 1031.129909
+PRN337 : 1102.032227
+PRN338 : 1032.427500
+PRN339 : 915.287948
+PRN340 : 1069.521468
+PRN341 : 1037.884311
+PRN342 : 1022.783172
+PRN343 : 1010.113843
+PRN344 : 936.663822
+PRN345 : 967.568134
+PRN346 : 998.248532
+PRN347 : 970.595103
+PRN348 : 1059.133013
+PRN349 : 1002.450372
+PRN350 : 1041.569244
+PRN351 : 1071.151467
+PRN352 : 1074.430879
+PRN353 : 1024.192522
+PRN354 : 1027.316098
+PRN355 : 903.837437
+PRN356 : 1025.087981
+PRN357 : 1078.239201
+PRN358 : 947.160744
+PRN359 : 943.791880
+PRN360 : 982.419379
+PRN361 : 1015.326413
+PRN362 : 930.457683
+PRN363 : 1056.989164
+PRN364 : 1048.214411
+PRN365 : 1011.714309
+PRN366 : 973.561885
+PRN367 : 938.897489
+PRN368 : 898.131351
+PRN369 : 1089.422229
+PRN370 : 1000.737285
+PRN371 : 943.187609
+PRN372 : 980.631385
+PRN373 : 1026.612456
+PRN374 : 914.530023
+PRN375 : 989.137431
+PRN376 : 936.013065
+PRN377 : 1037.484721
+PRN378 : 1005.741041
+PRN379 : 1079.121866
+PRN380 : 1055.031055
+PRN381 : 967.647139
+PRN382 : 1073.874913
+PRN383 : 987.676314
+PRN384 : 1064.291410
+PRN385 : 1036.029393
+PRN386 : 1021.885249
+PRN387 : 971.958380
+PRN388 : 1060.807076
+PRN389 : 944.558349
+PRN390 : 936.791120
+PRN391 : 986.203862
+PRN392 : 934.815474
+PRN393 : 950.177863
+PRN394 : 1053.566520
+PRN395 : 955.717211
+PRN396 : 914.562496
+PRN397 : 1021.237741
+PRN398 : 985.669335
+PRN399 : 1049.267052
+PRN400 : 1096.201981
+PRN401 : 871.290446
+PRN402 : 1056.942788
+PRN403 : 991.680777
+PRN404 : 987.094995
+PRN405 : 1030.857572
+PRN406 : 1014.738174
+PRN407 : 1122.789424
+PRN408 : 1057.378717
+PRN409 : 852.638284
+PRN410 : 979.034993
+PRN411 : 1050.776805
+PRN412 : 1013.760119
+PRN413 : 1013.442288
+PRN414 : 1056.335907
+PRN415 : 1003.833582
+PRN416 : 952.287368
+PRN417 : 983.410711
+PRN418 : 981.610215
+PRN419 : 955.751367
+PRN420 : 1026.024405
+PRN421 : 913.215405
+PRN422 : 1039.587952
+PRN423 : 934.420327
+PRN424 : 1048.085188
+PRN425 : 1069.984971
+PRN426 : 1022.569605
+PRN427 : 994.967729
+PRN428 : 978.231174
+PRN429 : 1091.191368
+PRN430 : 1110.565525
+PRN431 : 993.099640
+PRN432 : 943.356916
+PRN433 : 1008.520337
+PRN434 : 1039.057948
+PRN435 : 995.518711
+PRN436 : 923.381630
+PRN437 : 1008.525954
+PRN438 : 1074.725786
+PRN439 : 973.831465
+PRN440 : 992.850511
+PRN441 : 915.574772
+PRN442 : 935.268901
+PRN443 : 1030.668761
+PRN444 : 1006.389624
+PRN445 : 1070.532520
+PRN446 : 1044.161059
+PRN447 : 1009.868970
+PRN448 : 995.488179
+PRN449 : 1003.676963
+PRN450 : 1036.281447
+PRN451 : 1034.663850
+PRN452 : 1016.940948
+PRN453 : 1041.761449
+PRN454 : 1036.179308
+PRN455 : 927.147021
+PRN456 : 1015.267516
+PRN457 : 1025.120602
+PRN458 : 1003.012895
+PRN459 : 1017.405398
+PRN460 : 1084.152015
+PRN461 : 938.100545
+PRN462 : 982.848682
+PRN463 : 971.208439
+PRN464 : 1024.169902
+PRN465 : 984.026162
+PRN466 : 885.734952
+PRN467 : 970.662665
+PRN468 : 966.626383
+PRN469 : 970.630895
+PRN470 : 1065.729526
+PRN471 : 1087.725051
+PRN472 : 934.663676
+PRN473 : 982.326660
+PRN474 : 1028.573796
+PRN475 : 1042.602736
+PRN476 : 919.644128
+PRN477 : 1117.592528
+PRN478 : 973.727786
+PRN479 : 1017.035309
+PRN480 : 985.948508
+PRN481 : 993.332284
+PRN482 : 913.783006
+PRN483 : 1036.292614
+PRN484 : 944.347075
+PRN485 : 993.774520
+PRN486 : 1004.501737
+PRN487 : 975.074516
+PRN488 : 960.381723
+PRN489 : 1032.461979
+PRN490 : 965.849830
+PRN491 : 959.343865
+PRN492 : 998.303510
+PRN493 : 1098.972429
+PRN494 : 978.774732
+PRN495 : 923.587406
+PRN496 : 934.194464
+PRN497 : 1019.233725
+PRN498 : 998.978470
+PRN499 : 969.151090
+PRN500 : 1008.850844
+PRN501 : 1002.711126
+PRN502 : 991.872449
+PRN503 : 948.998513
+PRN504 : 985.482935
+PRN505 : 1064.356664
+PRN506 : 920.085989
+PRN507 : 957.924976
+PRN508 : 1059.586657
+PRN509 : 948.912499
+PRN510 : 969.734926
+PRN511 : 991.121045
+PRN512 : 980.425651
+PRN513 : 1002.105883
+PRN514 : 1044.420229
+PRN515 : 1050.108383
+PRN516 : 1055.666511
+PRN517 : 1050.562993
+PRN518 : 918.954103
+PRN519 : 1031.398881
+PRN520 : 1015.533157
+PRN521 : 982.110348
+PRN522 : 911.625140
+PRN523 : 908.261708
+PRN524 : 892.515101
+PRN525 : 999.272597
+PRN526 : 1063.535795
+PRN527 : 1001.036057
+PRN528 : 1054.891358
+PRN529 : 970.513392
+PRN530 : 1009.957719
+PRN531 : 994.077721
+PRN532 : 1094.151066
+PRN533 : 987.039498
+PRN534 : 973.811047
+PRN535 : 959.839155
+PRN536 : 961.322994
+PRN537 : 1051.549887
+PRN538 : 931.006138
+PRN539 : 1090.452240
+PRN540 : 967.033966
+PRN541 : 991.451211
+PRN542 : 1042.788825
+PRN543 : 1075.910278
+PRN544 : 1009.225010
+PRN545 : 1005.631562
+PRN546 : 972.521547
+PRN547 : 1001.788406
+PRN548 : 1026.096292
+PRN549 : 943.517653
+PRN550 : 1043.297977
+PRN551 : 1068.734900
+PRN552 : 971.528905
+PRN553 : 1101.736300
+PRN554 : 1064.997347
+PRN555 : 1036.258822
+PRN556 : 921.038528
+PRN557 : 1009.332591
+PRN558 : 908.767369
+PRN559 : 950.432316
+PRN560 : 1025.848851
+PRN561 : 1026.275418
+PRN562 : 1027.138158
+PRN563 : 891.008164
+PRN564 : 966.635315
+PRN565 : 1105.694983
+PRN566 : 901.168653
+PRN567 : 1005.085680
+PRN568 : 986.376781
+PRN569 : 1021.988728
+PRN570 : 1032.032304
+PRN571 : 1066.922843
+PRN572 : 978.165759
+PRN573 : 985.471003
+PRN574 : 1018.542739
+PRN575 : 1104.217604
+PRN576 : 993.366411
+PRN577 : 908.428162
+PRN578 : 1030.181215
+PRN579 : 959.654949
+PRN580 : 1001.943741
+PRN581 : 1024.829762
+PRN582 : 912.207242
+PRN583 : 1016.092124
+PRN584 : 944.519752
+PRN585 : 1115.606496
+PRN586 : 884.228571
+PRN587 : 1080.684296
+PRN588 : 1000.544389
+PRN589 : 1018.277531
+PRN590 : 1069.476533
+PRN591 : 972.380515
+PRN592 : 979.162973
+PRN593 : 1040.650719
+PRN594 : 962.376923
+PRN595 : 929.303273
+PRN596 : 977.208942
+PRN597 : 1009.877287
+PRN598 : 946.361825
+PRN599 : 937.358872
+PRN600 : 1045.706701
+PRN601 : 1001.353164
+PRN602 : 1071.691606
+PRN603 : 1020.971714
+PRN604 : 957.623404
+PRN605 : 970.896382
+PRN606 : 941.442249
+PRN607 : 945.406684
+PRN608 : 980.972425
+PRN609 : 969.174424
+PRN610 : 1031.894081
+PRN611 : 1029.095046
+PRN612 : 957.535746
+PRN613 : 943.186463
+PRN614 : 955.065383
+PRN615 : 988.925782
+PRN616 : 969.603025
+PRN617 : 976.321914
+PRN618 : 1081.982260
+PRN619 : 1021.381110
+PRN620 : 978.594813
+PRN621 : 991.522599
+PRN622 : 1056.221346
+PRN623 : 1005.261003
+PRN624 : 938.437253
+PRN625 : 1005.952092
+PRN626 : 1034.131845
+PRN627 : 1026.000397
+PRN628 : 1056.506798
+PRN629 : 1007.883782
+PRN630 : 948.805620
+PRN631 : 926.033432
+PRN632 : 929.683971
+PRN633 : 1084.549770
+PRN634 : 939.995126
+PRN635 : 1017.329087
+PRN636 : 929.734793
+PRN637 : 968.947835
+PRN638 : 992.543787
+PRN639 : 1051.439605
+PRN640 : 962.215123
+PRN641 : 934.669279
+PRN642 : 873.191979
+PRN643 : 978.156276
+PRN644 : 1036.169440
+PRN645 : 1009.123122
+PRN646 : 1042.696787
+PRN647 : 1004.992474
+PRN648 : 985.307029
+PRN649 : 914.993369
+PRN650 : 883.268853
+PRN651 : 978.492871
+PRN652 : 1037.468856
+PRN653 : 903.697832
+PRN654 : 1016.299145
+PRN655 : 1032.662729
+PRN656 : 971.860043
+PRN657 : 876.217640
+PRN658 : 1076.128497
+PRN659 : 967.662496
+PRN660 : 1118.152109
+PRN661 : 959.402400
+PRN662 : 931.127652
+PRN663 : 963.395502
+PRN664 : 985.039373
+PRN665 : 1130.966014
+PRN666 : 1015.222803
+PRN667 : 979.416557
+PRN668 : 1044.451714
+PRN669 : 1013.521435
+PRN670 : 986.434595
+PRN671 : 1081.668437
+PRN672 : 1118.515896
+PRN673 : 989.972971
+PRN674 : 966.293542
+PRN675 : 960.277413
+PRN676 : 1000.049668
+PRN677 : 1082.002407
+PRN678 : 993.898160
+PRN679 : 1026.534251
+PRN680 : 962.202086
+PRN681 : 1004.697585
+PRN682 : 945.449849
+PRN683 : 1036.296061
+PRN684 : 1025.414145
+PRN685 : 1063.165272
+PRN686 : 993.281842
+PRN687 : 1024.850451
+PRN688 : 978.756895
+PRN689 : 1000.348903
+PRN690 : 886.538615
+PRN691 : 1044.053091
+PRN692 : 1011.514352
+PRN693 : 977.162158
+PRN694 : 1040.123413
+PRN695 : 1049.348768
+PRN696 : 1070.281599
+PRN697 : 994.095158
+PRN698 : 998.311277
+PRN699 : 996.305247
+PRN700 : 926.604115
+PRN701 : 1000.046728
+PRN702 : 992.973540
+PRN703 : 1001.014210
+PRN704 : 950.900234
+PRN705 : 1074.602127
+PRN706 : 987.731174
+PRN707 : 946.971275
+PRN708 : 1027.578158
+PRN709 : 1024.011220
+PRN710 : 959.145194
+PRN711 : 1006.423937
+PRN712 : 981.213721
+PRN713 : 1044.065461
+PRN714 : 979.223485
+PRN715 : 1008.857033
+PRN716 : 1043.892450
+PRN717 : 1060.529980
+PRN718 : 933.250802
+PRN719 : 1061.461152
+PRN720 : 961.259637
+PRN721 : 1058.283064
+PRN722 : 1011.319119
+PRN723 : 996.167947
+PRN724 : 1037.665974
+PRN725 : 865.574895
+PRN726 : 1002.911144
+PRN727 : 978.886205
+PRN728 : 1002.302369
+PRN729 : 945.213366
+PRN730 : 1049.330526
+PRN731 : 1011.089995
+PRN732 : 911.273000
+PRN733 : 1030.796132
+PRN734 : 1101.699446
+PRN735 : 868.524288
+PRN736 : 951.807712
+PRN737 : 997.957367
+PRN738 : 953.791979
+PRN739 : 954.430760
+PRN740 : 993.834055
+PRN741 : 1021.300808
+PRN742 : 891.272906
+PRN743 : 879.577939
+PRN744 : 1093.176950
+PRN745 : 961.198091
+PRN746 : 976.086349
+PRN747 : 900.514535
+PRN748 : 911.711376
+PRN749 : 975.997454
+PRN750 : 1007.292432
+PRN751 : 1023.266464
+PRN752 : 1066.723102
+PRN753 : 1060.468262
+PRN754 : 1115.673922
+PRN755 : 1041.290534
+PRN756 : 912.248040
+PRN757 : 1034.518587
+PRN758 : 967.154895
+PRN759 : 1043.478493
+PRN760 : 1026.025257
+PRN761 : 997.795632
+PRN762 : 948.207823
+PRN763 : 970.366980
+PRN764 : 973.390941
+PRN765 : 1008.249734
+PRN766 : 965.810614
+PRN767 : 1034.368743
+PRN768 : 969.130435
+PRN769 : 939.525153
+PRN770 : 939.346863
+PRN771 : 1098.433434
+PRN772 : 973.913623
+PRN773 : 994.629391
+PRN774 : 1019.029751
+PRN775 : 999.068601
+PRN776 : 952.374565
+PRN777 : 1005.413476
+PRN778 : 1008.606450
+PRN779 : 949.586928
+PRN780 : 984.336007
+PRN781 : 966.334220
+PRN782 : 952.353697
+PRN783 : 1081.685083
+PRN784 : 1148.865924
+PRN785 : 1043.881782
+PRN786 : 950.747262
+PRN787 : 1013.342099
+PRN788 : 1021.841738
+PRN789 : 943.202183
+PRN790 : 1018.658753
+PRN791 : 1039.519748
+PRN792 : 1066.745417
+PRN793 : 991.922297
+PRN794 : 989.993508
+PRN795 : 935.256770
+PRN796 : 1049.355101
+PRN797 : 984.271969
+PRN798 : 1046.060384
+PRN799 : 1044.170052
+PRN800 : 920.720627
+PRN801 : 938.453295
+PRN802 : 980.425711
+PRN803 : 974.857425
+PRN804 : 1016.266917
+PRN805 : 1039.658764
+PRN806 : 925.171481
+PRN807 : 982.577139
+PRN808 : 997.552114
+PRN809 : 1063.108389
+PRN810 : 927.965656
+PRN811 : 1049.828313
+PRN812 : 1012.506665
+PRN813 : 962.613627
+PRN814 : 915.580235
+PRN815 : 1003.806599
+PRN816 : 1086.454522
+PRN817 : 968.915000
+PRN818 : 1008.546559
+PRN819 : 856.499306
+PRN820 : 960.536031
+PRN821 : 1025.778766
+PRN822 : 1071.326673
+PRN823 : 993.205599
+PRN824 : 1052.750624
+PRN825 : 1040.987166
+PRN826 : 1034.039072
+PRN827 : 963.048804
+PRN828 : 970.510949
+PRN829 : 1049.829816
+PRN830 : 934.945358
+PRN831 : 980.925084
+PRN832 : 1037.321718
+PRN833 : 1031.532551
+PRN834 : 1049.045828
+PRN835 : 1086.751941
+PRN836 : 1036.770670
+PRN837 : 1032.479988
+PRN838 : 957.264581
+PRN839 : 982.586134
+PRN840 : 1002.144549
+PRN841 : 856.221346
+PRN842 : 1077.732261
+PRN843 : 1023.844204
+PRN844 : 1049.015013
+PRN845 : 1109.868706
+PRN846 : 1032.030843
+PRN847 : 994.431051
+PRN848 : 999.263384
+PRN849 : 1052.311112
+PRN850 : 955.831734
+PRN851 : 958.864423
+PRN852 : 1016.728795
+PRN853 : 1004.874796
+PRN854 : 1004.259084
+PRN855 : 963.819718
+PRN856 : 949.755330
+PRN857 : 987.900168
+PRN858 : 995.226017
+PRN859 : 1098.708859
+PRN860 : 1009.514337
+PRN861 : 948.777253
+PRN862 : 982.680500
+PRN863 : 996.028285
+PRN864 : 1029.124415
+PRN865 : 942.101818
+PRN866 : 1034.222040
+PRN867 : 949.348550
+PRN868 : 965.963597
+PRN869 : 995.021503
+PRN870 : 889.653326
+PRN871 : 951.899055
+PRN872 : 1038.667756
+PRN873 : 1088.885329
+PRN874 : 979.471141
+PRN875 : 1027.647348
+PRN876 : 1054.157446
+PRN877 : 1003.472116
+PRN878 : 914.016815
+PRN879 : 1034.862598
+PRN880 : 936.253104
+PRN881 : 962.254857
+PRN882 : 1042.166034
+PRN883 : 934.618156
+PRN884 : 939.923222
+PRN885 : 998.649324
+PRN886 : 986.753492
+PRN887 : 1095.450118
+PRN888 : 982.660119
+PRN889 : 947.149665
+PRN890 : 893.930985
+PRN891 : 956.589953
+PRN892 : 1067.312301
+PRN893 : 952.406240
+PRN894 : 986.728920
+PRN895 : 1030.999219
+PRN896 : 993.306628
+PRN897 : 972.230094
+PRN898 : 993.227094
+PRN899 : 1008.926188
+PRN900 : 976.391192
+PRN901 : 952.545561
+PRN902 : 1011.157462
+PRN903 : 1056.357455
+PRN904 : 1027.929510
+PRN905 : 986.749151
+PRN906 : 963.462803
+PRN907 : 988.772926
+PRN908 : 1031.930882
+PRN909 : 981.130300
+PRN910 : 1073.463235
+PRN911 : 1081.696380
+PRN912 : 1020.678551
+PRN913 : 906.544270
+PRN914 : 1097.495849
+PRN915 : 1113.146380
+PRN916 : 1058.443029
+PRN917 : 902.487848
+PRN918 : 1009.914281
+PRN919 : 1057.100054
+PRN920 : 940.428079
+PRN921 : 941.473058
+PRN922 : 905.716759
+PRN923 : 997.789107
+PRN924 : 962.306176
+PRN925 : 1072.504216
+PRN926 : 946.554822
+PRN927 : 972.932223
+PRN928 : 1024.961360
+PRN929 : 1080.513692
+PRN930 : 1047.137658
+PRN931 : 1012.824933
+PRN932 : 976.404512
+PRN933 : 895.604509
+PRN934 : 1114.446905
+PRN935 : 1051.342533
+PRN936 : 1027.204609
+PRN937 : 917.811842
+PRN938 : 882.306487
+PRN939 : 1010.444766
+PRN940 : 978.686109
+PRN941 : 1020.585581
+PRN942 : 989.944335
+PRN943 : 1010.484323
+PRN944 : 936.727744
+PRN945 : 1038.631446
+PRN946 : 1012.530572
+PRN947 : 961.577357
+PRN948 : 988.253770
+PRN949 : 1054.353206
+PRN950 : 964.120426
+PRN951 : 943.486864
+PRN952 : 1052.650937
+PRN953 : 980.334313
+PRN954 : 1137.186817
+PRN955 : 1125.255968
+PRN956 : 964.830093
+PRN957 : 930.646626
+PRN958 : 1043.519941
+PRN959 : 1088.829938
+PRN960 : 1024.017051
+PRN961 : 1065.574266
+PRN962 : 1008.740833
+PRN963 : 972.421950
+PRN964 : 1082.991316
+PRN965 : 963.163028
+PRN966 : 1040.184197
+PRN967 : 865.234238
+PRN968 : 1026.703665
+PRN969 : 991.758625
+PRN970 : 1091.021716
+PRN971 : 1079.872892
+PRN972 : 1042.401875
+PRN973 : 1085.624604
+PRN974 : 1055.314437
+PRN975 : 1138.344149
+PRN976 : 906.958400
+PRN977 : 954.641162
+PRN978 : 1014.840472
+PRN979 : 991.906864
+PRN980 : 947.716713
+PRN981 : 1075.346169
+PRN982 : 913.043943
+PRN983 : 1006.107228
+PRN984 : 940.937691
+PRN985 : 925.827770
+PRN986 : 870.001279
+PRN987 : 1093.348026
+PRN988 : 990.938631
+PRN989 : 1067.552107
+PRN990 : 936.441162
+PRN991 : 956.066787
+PRN992 : 1001.705214
+PRN993 : 1007.198453
+PRN994 : 956.883661
+PRN995 : 1033.645356
+PRN996 : 1036.395999
+PRN997 : 954.941658
+PRN998 : 1015.720547
+PRN999 : 1023.147999
+sample mean  : 1000.303825
+true mean    : 1000.000000
+sample stddev: 53.233584
+true stddev  : 53.000000
+z-score      : 0.181279
+p-value      : 0.428600
+QH[normality]: 1.015347