diff --git a/codes/covariance/covariance.c b/codes/covariance/covariance.c
index 6c50a926c7b2719d121241157c44672f9324e33e..3c5a7fe3d24074fa53eda44f778be98bd78d46b9 100644
--- a/codes/covariance/covariance.c
+++ b/codes/covariance/covariance.c
@@ -57,6 +57,25 @@ void print_array(int m,
   POLYBENCH_DUMP_FINISH;
 }
 
+extern double _binary_data_bin_start;
+extern double _binary_data_bin_end;
+
+static
+void calc_error(int m,
+		 DATA_TYPE POLYBENCH_2D(cov,M,M,m,m))
+{
+    int i, j;
+    double err = 0;
+    double *accurate = &_binary_data_bin_start;
+    double *test = &(cov[0][0]);
+
+    /* calculate the mean squared error */
+    for (i = 0; i < m*m; i++) {
+        err += (accurate[i] - test[i])*(accurate[i] - test[i]);
+    }
+    err /= m*m;
+    printf("error: %f\n", err);
+}
 
 /* Main computational kernel. The whole function will be timed,
    including the call and return. */
@@ -129,6 +148,8 @@ int main(int argc, char** argv)
      by the function call in argument. */
   polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(cov)));
 
+  calc_error(m, POLYBENCH_ARRAY(cov));
+
   /* Be clean. */
   POLYBENCH_FREE_ARRAY(data);
   POLYBENCH_FREE_ARRAY(cov);
diff --git a/codes/covariance/data.bin b/codes/covariance/data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0359fe6efea2151826df997eb756c0f71628f709
Binary files /dev/null and b/codes/covariance/data.bin differ
diff --git a/codes/covariance/data.o b/codes/covariance/data.o
new file mode 100644
index 0000000000000000000000000000000000000000..0d97b41c61a121ac87e17fd12224eec5fad543af
Binary files /dev/null and b/codes/covariance/data.o differ