aboutsummaryrefslogtreecommitdiff
path: root/attic/dave
diff options
context:
space:
mode:
authorcnlohr <lohr85@gmail.com>2018-04-15 17:43:12 -0400
committercnlohr <lohr85@gmail.com>2018-04-15 17:43:12 -0400
commit0ab91a6e9374f190c049a5d8ea1319b9b37529c1 (patch)
tree85398db4a4d5a40b3adec733fe1d1e183e13f3b8 /attic/dave
parentdd9936ef174746b73a688706de9c4a14fca2d58e (diff)
downloadlibsurvive-0ab91a6e9374f190c049a5d8ea1319b9b37529c1.tar.gz
libsurvive-0ab91a6e9374f190c049a5d8ea1319b9b37529c1.tar.bz2
Move things into attic and update Makefile to do dependnencies.
Diffstat (limited to 'attic/dave')
-rwxr-xr-xattic/dave/AffineSolvebin0 -> 40104 bytes
-rw-r--r--attic/dave/AffineSolve.c783
-rw-r--r--attic/dave/AffineSolve.c.CHARLES643
-rw-r--r--attic/dave/HMD_normals.csv32
-rw-r--r--attic/dave/HMD_points.csv32
-rw-r--r--attic/dave/Makefile21
-rw-r--r--attic/dave/OrthoPlot.c451
-rwxr-xr-xattic/dave/dclapack_testbin0 -> 12960 bytes
-rw-r--r--attic/dave/dclapack_test.c34
-rw-r--r--attic/dave/errors.txt2141
-rw-r--r--attic/dave/fileutil.c133
-rw-r--r--attic/dave/fileutil.h35
-rw-r--r--attic/dave/kalman_filter.c72
-rw-r--r--attic/dave/kalman_filter.h116
-rw-r--r--attic/dave/main.c29
-rw-r--r--attic/dave/olddata/HMD_normals.csv32
-rw-r--r--attic/dave/olddata/HMD_points.csv32
-rw-r--r--attic/dave/olddata/ptinfo.csv88
-rw-r--r--attic/dave/ptinfo.csv69
19 files changed, 4743 insertions, 0 deletions
diff --git a/attic/dave/AffineSolve b/attic/dave/AffineSolve
new file mode 100755
index 0000000..bd93cbd
--- /dev/null
+++ b/attic/dave/AffineSolve
Binary files differ
diff --git a/attic/dave/AffineSolve.c b/attic/dave/AffineSolve.c
new file mode 100644
index 0000000..685062e
--- /dev/null
+++ b/attic/dave/AffineSolve.c
@@ -0,0 +1,783 @@
+//
+// main.c
+// Aff
+// Created by user on 3/2/17.
+// Copyright © 2017 user. All rights reserved.
+//
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include "dclapack.h"
+#include <linmath.h>
+#define RegisterDriver(a,b)
+#include "poser_daveortho.c"
+#define LH_ID 0
+#define NUM_HMD 32
+#define INDIR "full_test_triangle_on_floor/"
+
+#define MAX_POINTS SENSORS_PER_OBJECT
+//#define _ABS(a) ( (a)<=0 ? -(a) : (a) )
+#define _SIGN(a) ( (a)<=0 ? -1.0f : 1.0f )
+#define RANDF ( (float)rand() / (float)RAND_MAX )
+#define PI 3.14159265358979323846264
+
+#define STEP_SIZE_ROT 1.0
+#define STEP_SIZE_POS 1.0
+#define FALLOFF 0.99999
+#define NITER 2000000
+#define TOO_SMALL 0.0001
+#define ORTHOG_PENALTY 1.0
+
+float hmd_pos[NUM_HMD][3];
+void ReadHmdPoints()
+{
+ int i;
+ FILE *fin = fopen(INDIR "HMD_points.csv","r");
+ if (fin==NULL) {
+ printf("ERROR: could not open HMD_points.csv for reading\n");
+ exit(1);
+ }
+
+ for (i=0; i<NUM_HMD; i++) {
+ fscanf(fin, "%f %f %f", &(hmd_pos[i][0]), &(hmd_pos[i][1]), &(hmd_pos[i][2]));
+ }
+
+ fclose(fin);
+}
+
+float hmd_angle[NUM_HMD][2];
+void ReadPtinfo()
+{
+ // Initialize to -9999
+ int i;
+ for (i=0; i<NUM_HMD; i++) { hmd_angle[i][0]=-9999.0; hmd_angle[i][1]=-9999.0; }
+
+ // Read ptinfo.csv
+ FILE *fin = fopen(INDIR "ptinfo.csv", "r");
+ if (fin==NULL) { printf("ERROR: could not open ptinfo.csv for reading\n"); exit(1); }
+ while (!feof(fin))
+ {
+ // Read the angle
+ int sen,lh,axis,count;
+ float angle, avglen, stddevang, stddevlen;
+ float max_outlier_length, max_outlier_angle;
+ int rt = fscanf( fin, "%d %d %d %d %f %f %f %f %f %f\n",
+ &sen, &lh, &axis, &count,
+ &angle, &avglen, &stddevang, &stddevlen,
+ &max_outlier_length, &max_outlier_angle);
+ if (rt != 10) { break; }
+
+ // If it's valid, store in the result
+ if (lh == LH_ID && sen < NUM_HMD) {
+ hmd_angle[sen][axis] = angle;
+ }
+ }
+ fclose(fin);
+}
+
+void AffineSolve(
+ float T[4][4], // OUTPUT: transform
+ float O[MAX_POINTS][4], // INPUT: points, offsets
+ float N[MAX_POINTS][3], // INPUT: plane normals
+ float D[MAX_POINTS], // INPUT: plane offsets
+ int nPoints, int nIter,
+ float stepSizeRot, float stepSizePos, float falloff, int constrain)
+{
+ int i,j,k,iter;
+ //T[3][3] = 1.0f;
+
+ printf("iter x y z error\n");
+
+ float gradDot = 1.0;
+ float prevGradDot = 1.0;
+ float de_dT[3][4]; // the gradient
+ float conj[3][4]; // the conjugate
+ float errorSq=0.0;
+ for (iter=0; iter<nIter; iter++)
+ {
+ //----------------------------------
+ // Calculate the gradient direction
+ //----------------------------------
+ errorSq = 0.0;
+ memset(de_dT, 0, 3*4*sizeof(float));
+ for (i=0; i<nPoints; i++)
+ {
+ // What is the plane deviation error
+ float Ei = -D[i];
+ for (j=0; j<3; j++) {
+ float Tj_oi = 0.0f;
+ for (k=0; k<4; k++) {
+ Tj_oi += T[j][k] * O[i][k];
+ }
+ Ei += N[i][j] * Tj_oi;
+ }
+// printf("E[%d] %f\n", i, Ei);
+
+ // Figure out contribution to the error
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ de_dT[j][k] += N[i][j] * O[i][k] * Ei;
+ }
+ }
+
+ errorSq += Ei*Ei;
+ }
+
+// printf("%d %f %f %f %f\n", iter, T[0][3], T[1][3], T[2][3], sqrt(errorSq));
+//exit(1);
+ // Constrain the gradient (such that dot products are zero)
+ if (constrain)
+ {
+ float T0T1 = 0.0, T1T2 = 0.0, T2T0 = 0.0;
+ for (k=0; k<3; k++) {
+ T0T1 += T[0][k] * T[1][k];
+ T1T2 += T[1][k] * T[2][k];
+ T2T0 += T[2][k] * T[0][k];
+ }
+// printf("T0T1 %f T1T2 %f T2T0 %f\n", T0T1, T1T2, T2T0);
+ for (k=0; k<3; k++) {
+ de_dT[0][k] += ORTHOG_PENALTY * 2.0 * T0T1 * T[1][k];
+ de_dT[0][k] += ORTHOG_PENALTY * 2.0 * T2T0 * T[2][k];
+ de_dT[1][k] += ORTHOG_PENALTY * 2.0 * T1T2 * T[2][k];
+ de_dT[1][k] += ORTHOG_PENALTY * 2.0 * T0T1 * T[0][k];
+ de_dT[2][k] += ORTHOG_PENALTY * 2.0 * T1T2 * T[1][k];
+ de_dT[2][k] += ORTHOG_PENALTY * 2.0 * T2T0 * T[0][k];
+ }
+ }
+
+ // Calculate the gradient dot product
+ // (used by conjugate gradient method)
+ prevGradDot = gradDot;
+ gradDot = 0.0;
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ gradDot += de_dT[j][k] * de_dT[j][k];
+ }
+ }
+
+// printf("Iter %d error %f gradDot %f prevGradDot %f\n", iter, sqrt(errorSq), gradDot, prevGradDot);
+
+ //----------------------------------
+ // Calculate the conjugate direction
+ //----------------------------------
+// if (iter==0) {
+ // First iteration, just use the gradient
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ conj[j][k] = -de_dT[j][k];
+ }
+ }
+/* } else {
+ // Calculate "beta" for Fletcher Reeves method
+ float beta = gradDot / prevGradDot;
+//printf("gradDot %f prevGradDot %f beta %f\n", gradDot, prevGradDot, beta);
+
+ // Update the conjugate
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ conj[j][k] = beta*conj[j][k] - de_dT[j][k];
+ }
+ }
+ }
+*/
+
+// PRINT_MAT(de_dT,4,4);
+// exit(1);
+
+ //----------------------------------
+ // How large is the gradient ?
+ //----------------------------------
+
+ double gradSizeRot = 0.0;
+ double gradSizePos = 0.0;
+ for (j=0; j<3; j++) {
+ for (k=0; k<3; k++) {
+ gradSizeRot += _ABS(conj[j][k]);
+ }
+ gradSizePos += _ABS(conj[j][k]);
+ }
+ if (gradSizeRot <= TOO_SMALL && gradSizePos <= TOO_SMALL) { break; } // Quit, we've totally converged
+
+ //----------------------------------
+ // Descend in the gradient direction
+ //----------------------------------
+ if (gradSizeRot > TOO_SMALL) {
+ float scaleRot = stepSizeRot / gradSizeRot;
+ for (j=0; j<3; j++) {
+ for (k=0; k<3; k++) {
+ T[j][k] += scaleRot * conj[j][k];
+ }
+ }
+ stepSizeRot *= falloff;
+ }
+
+ if (gradSizePos > TOO_SMALL) {
+ float scalePos = stepSizePos / gradSizePos;
+ for (j=0; j<3; j++) {
+ T[j][3] += scalePos * conj[j][3];
+ }
+ stepSizePos *= falloff;
+ }
+
+ // Constrain the gradient (such that scaling is one)
+ if (constrain)
+ {
+ // Measure the scales
+ float len[3] = {0.0, 0.0, 0.0};
+ for (j=0; j<3; j++) {
+ double lenSq = 0.0;
+ for (k=0; k<3; k++) { lenSq += (double)T[j][k] * (double)T[j][k]; }
+ len[j] = sqrt(lenSq);
+ }
+
+ // How far off is the scale?
+ float xzLen = 0.5 * (len[0] + len[2]);
+ if (xzLen > TOO_SMALL) {
+ float inv_xzLen = 1.0 / xzLen;
+ for (j=0; j<3; j++) {
+ T[3][j] *= inv_xzLen;
+ }
+ }
+
+ // Rescale the thing
+ for (j=0; j<3; j++)
+ {
+ if (len[j] > TOO_SMALL) {
+ float inv_len = 1.0 / len[j];
+ for (k=0; k<3; k++) { T[j][k] *= inv_len; }
+ }
+ }
+ }
+ }
+ float dist = sqrt(T[0][3]*T[0][3] + T[1][3]*T[1][3] + T[2][3]*T[2][3]);
+ printf("AffineSolve: pos: %f %f %f dist: %f\n", T[0][3], T[1][3], T[2][3], dist);
+}
+
+int main()
+{
+ int i,j,k,sen,axis;
+
+ // Read the data files
+ ReadHmdPoints();
+ ReadPtinfo();
+
+ //-------------------------
+ // Package the lighthouse data for "AffineSolve"
+ //-------------------------
+
+ // Data for the "iterative" affine solve formula
+ float Tcalc[4][4];
+ float O[MAX_POINTS][4];
+ float N[MAX_POINTS][3];
+ float D[MAX_POINTS];
+ int nPlanes = 0;
+
+ for (sen=0; sen<NUM_HMD; sen++)
+ {
+ for (axis=0; axis<2; axis++)
+ {
+ if (hmd_angle[sen][axis] != -9999.0)
+ {
+ // Set the offset
+ O[nPlanes][0] = hmd_pos[sen][0];
+ O[nPlanes][1] = hmd_pos[sen][1];
+ O[nPlanes][2] = hmd_pos[sen][2];
+ O[nPlanes][3] = 1.0;
+
+ // Calculate the plane equation
+ if (axis == 0) { // Horizontal
+ N[nPlanes][0] = -cos(hmd_angle[sen][axis]);
+ N[nPlanes][1] = -sin(hmd_angle[sen][axis]);
+ N[nPlanes][2] = 0.0;
+ D[nPlanes] = 0.0;
+ } else { // Vertical
+ N[nPlanes][0] = 0.0;
+ N[nPlanes][1] = -sin(hmd_angle[sen][axis]);
+ N[nPlanes][2] = cos(hmd_angle[sen][axis]);
+ D[nPlanes] = 0.0;
+ }
+
+ printf("plane %d O %.3f %.3f %.3f %.3f N %.3f %.3f %.3f D %.3f\n",
+ nPlanes,
+ O[nPlanes][0], O[nPlanes][1], O[nPlanes][2], O[nPlanes][3],
+ N[nPlanes][0], N[nPlanes][1], N[nPlanes][2],
+ D[nPlanes]);
+ nPlanes++;
+ }
+ }
+ }
+
+
+ printf("nPlanes %d\n", nPlanes);
+
+ //}
+
+ PRINT_MAT(Tcalc,4,4);
+
+
+ //--------------------------------------------------
+ // Package the data for "OrthoSolve"
+ //--------------------------------------------------
+
+ // Data for the "fake" ortho solve formula
+ float Tortho[4][4]; // OUTPUT: 4x4 transformation matrix
+ FLOAT S_out[2][MAX_POINTS]; // INPUT: array of screenspace points
+ FLOAT S_in[2][MAX_POINTS]; // INPUT: array of screenspace points
+ FLOAT X_in[3][MAX_POINTS]; // INPUT: array of offsets
+ int nPoints=0;
+
+ // Transform into the "OrthoSolve" format
+ for (sen=0; sen<NUM_HMD; sen++)
+ {
+ if (hmd_angle[sen][0] != -9999.0 && hmd_angle[sen][1] != -9999.0)
+ {
+ S_in[0][nPoints] = hmd_angle[sen][0];
+ S_in[1][nPoints] = hmd_angle[sen][1];
+ X_in[0][nPoints] = hmd_pos[sen][0];
+ X_in[1][nPoints] = hmd_pos[sen][1];
+ X_in[2][nPoints] = hmd_pos[sen][2];
+ nPoints++;
+ }
+ }
+ printf("OrthoSolve nPoints %d\n", nPoints);
+
+ //--------------------------------------------------
+ // Run the "OrthoSolve" and then the "AffineSolve"
+ //--------------------------------------------------
+
+ int loop;
+ for (loop=0; loop<1; loop++)
+ {
+ // Run OrthoSolve
+ OrthoSolve(
+ Tortho, // OUTPUT: 4x4 transformation matrix
+ S_out, // OUTPUT: array of output screenspace points
+ S_in, // INPUT: array of screenspace points
+ X_in, // INPUT: array of offsets
+ nPoints);
+ printf( "POS: %f %f %f\n", Tortho[0][3], Tortho[1][3], Tortho[2][3]);
+
+ // Come up with rotation and transposed version of Tortho
+ FLT TorthoTr[4][4], Rortho[4][4], RorthoTr[4][4];
+ TRANSP(Tortho,TorthoTr,4,4);
+ memcpy(Rortho,Tortho,4*4*sizeof(FLT));
+ Rortho[3][0]=0.0; Rortho[3][1]=0.0; Rortho[3][2]=0.0;
+ TRANSP(Rortho,RorthoTr,4,4);
+ PRINT(Tortho,4,4);
+ PRINT(Rortho,4,4);
+
+ // Print out some quaternions
+ FLT Tquat[4], TquatTr[4], Rquat[4], RquatTr[4];
+ quatfrommatrix(Tquat, &Tortho[0][0] );
+ quatfrommatrix(TquatTr, &TorthoTr[0][0] );
+ quatfrommatrix(Rquat, &Rortho[0][0] );
+ quatfrommatrix(RquatTr, &RorthoTr[0][0] );
+ printf( "Tquat : %f %f %f %f = %f\n", Tquat [0], Tquat [1], Tquat [2], Tquat [3], quatmagnitude(Tquat));
+ printf( "TquatTr: %f %f %f %f = %f\n", TquatTr[0], TquatTr[1], TquatTr[2], TquatTr[3], quatmagnitude(TquatTr));
+ printf( "Rquat : %f %f %f %f = %f\n", Rquat [0], Rquat [1], Rquat [2], Rquat [3], quatmagnitude(Rquat));
+ printf( "RquatTr: %f %f %f %f = %f\n", RquatTr[0], RquatTr[1], RquatTr[2], RquatTr[3], quatmagnitude(RquatTr));
+
+ // Flip y and z axies
+ FLT T2[4][4] = {
+ { Tortho[0][0], -Tortho[0][2], -Tortho[0][1], 0.0 },
+ { Tortho[1][0], -Tortho[1][2], -Tortho[1][1], 0.0 },
+ { Tortho[2][0], -Tortho[2][2], -Tortho[2][1], 0.0 },
+ { 0.0, 0.0, 0.0, 1.0 } };
+PRINT(T2,4,4);
+
+ // Print out the quaternions
+ FLT T2quat[4];
+ quatfrommatrix(T2quat, &T2[0][0] );
+ printf( "T2quat : %f %f %f %f = %f\n", T2quat [0], T2quat [1], T2quat [2], T2quat [3], quatmagnitude(T2quat));
+ }
+
+ // Run the calculation for Tcalc
+ //int run;
+ //for (run=0; run<100; run++) {
+/*
+ // Initialize Tcalc to the identity matrix
+ memcpy(Tcalc, Tortho, 4*4*sizeof(float));
+ //memset(Tcalc, 0, 4*4*sizeof(float));
+ //for (i=0; i<4; i++) { Tcalc[i][i] = 1.0f; }
+
+ // Solve it!
+ AffineSolve(
+ Tcalc, // OUTPUT: transform
+ O, // INPUT: points, offsets
+ N, // INPUT: plane normals
+ D, // INPUT: plane offsets
+ nPlanes, NITER,
+ STEP_SIZE_ROT, STEP_SIZE_POS, FALLOFF,
+ 1);
+*/
+ // insert code here...
+ return 0;
+}
+
+
+
+
+
+#if 0
+#define PRINT_MAT(A,M,N) { \
+ int m,n; \
+ printf(#A "\n"); \
+ for (m=0; m<M; m++) { \
+ for (n=0; n<N; n++) { \
+ printf("%f\t", A[m][n]); \
+ } \
+ printf("\n"); \
+ } \
+}
+
+#define CrossProduct(ox,oy,oz,a,b,c,x,y,z) { \
+ ox=(b)*(z)-(c)*(y); \
+ oy=(c)*(x)-(a)*(z); \
+ oz=(a)*(y)-(b)*(x); }
+
+void OrthoSolve(
+ float T[4][4], // OUTPUT: 4x4 transformation matrix
+ FLOAT S_out[2][MAX_POINTS], // OUTPUT: array of screenspace points
+ FLOAT S_in[2][MAX_POINTS], // INPUT: array of screenspace points
+ FLOAT X_in[3][MAX_POINTS], // INPUT: array of offsets
+ int nPoints)
+{
+ int i,j,k;
+ FLOAT R[3][3]; // OUTPUT: 3x3 rotation matrix
+ FLOAT trans[3]; // INPUT: x,y,z translation vector
+
+ //--------------------
+ // Remove the center of the HMD offsets, and the screen space
+ //--------------------
+ FLOAT xbar[3] = {0.0, 0.0, 0.0};
+ FLOAT sbar[2] = {0.0, 0.0};
+ FLOAT S[2][MAX_POINTS];
+ FLOAT X[3][MAX_POINTS];
+ FLOAT inv_nPoints = 1.0 / nPoints;
+ for (i=0; i<nPoints; i++) {
+ xbar[0] += X_in[0][i];
+ xbar[1] += X_in[1][i];
+ xbar[2] += X_in[2][i];
+ sbar[0] += S_in[0][i];
+ sbar[1] += S_in[1][i];
+ }
+ for (j=0; j<3; j++) { xbar[j] *= inv_nPoints; }
+ for (j=0; j<2; j++) { sbar[j] *= inv_nPoints; }
+ for (i=0; i<nPoints; i++) {
+ X[0][i] = X_in[0][i] - xbar[0];
+ X[1][i] = X_in[1][i] - xbar[1];
+ X[2][i] = X_in[2][i] - xbar[2];
+ S[0][i] = S_in[0][i] - sbar[0];
+ S[1][i] = S_in[1][i] - sbar[1];
+ }
+
+ //--------------------
+ // Solve for the morph matrix
+ // S = M X
+ // thus
+ // (SX^t)(XX^t)^-1 = M
+ //--------------------
+ FLOAT Xt[MAX_POINTS][3];
+ FLOAT XXt[3][3];
+ FLOAT invXXt[3][3];
+ FLOAT SXt[2][3];
+ FLOAT M[2][3]; // Morph matrix! (2 by 3)
+ TRANSP(X,Xt,3,nPoints);
+ MUL(X,Xt,XXt,3,nPoints,3);
+ MUL(S,Xt,SXt,2,nPoints,3);
+ INV(XXt,invXXt,3);
+ MUL(SXt,invXXt,M,2,3,3);
+//PRINT(M,2,3);
+
+// Double checking work
+FLOAT S_morph[2][MAX_POINTS];
+MUL(M,X,S_morph,2,3,nPoints);
+for (i=0; i<nPoints; i++) { S_morph[0][i]+=sbar[0]; S_morph[1][i]+=sbar[1]; }
+
+ //--------------------
+ // Solve for the non-trivial vector
+ // uf -- vector that goes into the camera
+ //--------------------
+ FLOAT uM[3][3] = {
+ { M[0][0], M[0][1], M[0][2] },
+ { M[1][0], M[1][1], M[1][2] },
+ { 3.14567, -1.2345, 4.32567 } }; // Morph matrix with appended row
+//PRINT(uM,3,3);
+// ToDo: Pick a number for the bottom that is NOT linearly separable with M[0] and M[1]
+ FLOAT B[3][1] = { {0.0}, {0.0}, {1.0} };
+ FLOAT inv_uM[3][3];
+ FLOAT uf[3][1];
+ INV(uM,inv_uM,3);
+ MUL(inv_uM,B,uf,3,3,1);
+
+ //--------------------
+ // Solve for unit length vector
+ // f that goes into the camera
+ //--------------------
+ FLOAT uf_len = sqrt( uf[0][0]*uf[0][0] + uf[1][0]*uf[1][0] + uf[2][0]*uf[2][0] );
+ FLOAT f[3][1] = { {uf[0][0]/uf_len}, {uf[1][0]/uf_len}, {uf[2][0]/uf_len} };
+//PRINT(uf,3,1);
+//PRINT(f,3,1);
+
+//FLOAT check[3][1];
+//MUL(uM,uf,check,3,3,1);
+//PRINT(check,3,1);
+
+ //--------------------
+ // take cross products to get vectors u,r
+ //--------------------
+ FLOAT u[3][1], r[3][1];
+ CrossProduct(u[0][0],u[1][0],u[2][0],f[0][0],f[1][0],f[2][0],1.0,0.0,0.0);
+ FLOAT inv_ulen = 1.0 / sqrt( u[0][0]*u[0][0] + u[1][0]*u[1][0] + u[2][0]*u[2][0] );
+ u[0][0]*=inv_ulen; u[1][0]*=inv_ulen; u[2][0]*=inv_ulen;
+ CrossProduct(r[0][0],r[1][0],r[2][0],f[0][0],f[1][0],f[2][0],u[0][0],u[1][0],u[2][0]);
+//PRINT(u,3,1);
+//PRINT(r,3,1);
+
+ //--------------------
+ // Use morph matrix to get screen space
+ // uhat,rhat
+ //--------------------
+ FLOAT uhat[2][1], rhat[2][1], fhat[2][1];
+ MUL(M,f,fhat,2,3,1);
+ MUL(M,u,uhat,2,3,1);
+ MUL(M,r,rhat,2,3,1);
+ FLOAT fhat_len = sqrt( fhat[0][0]*fhat[0][0] + fhat[1][0]*fhat[1][0] );
+ FLOAT uhat_len = sqrt( uhat[0][0]*uhat[0][0] + uhat[1][0]*uhat[1][0] );
+ FLOAT rhat_len = sqrt( rhat[0][0]*rhat[0][0] + rhat[1][0]*rhat[1][0] );
+ FLOAT urhat_len = 0.5 * (uhat_len + rhat_len);
+/*
+printf("fhat %f %f (len %f)\n", fhat[0][0], fhat[1][0], fhat_len);
+printf("uhat %f %f (len %f)\n", uhat[0][0], uhat[1][0], uhat_len);
+printf("rhat %f %f (len %f)\n", rhat[0][0], rhat[1][0], rhat_len);
+*/
+// FLOAT ydist1 = 1.0 / uhat_len; //0.25*PI / uhat_len;
+// FLOAT ydist2 = 1.0 / rhat_len; //0.25*PI / rhat_len;
+ FLOAT ydist = 1.0 / urhat_len;
+ //printf("ydist1 %f ydist2 %f ydist %f\n", ydist1, ydist2, ydist);
+
+ //--------------------
+ // Rescale the axies to be of the proper length
+ //--------------------
+ FLOAT x[3][1] = { {M[0][0]*ydist}, {0.0}, {M[1][0]*ydist} };
+ FLOAT y[3][1] = { {M[0][1]*ydist}, {0.0}, {M[1][1]*ydist} };
+ FLOAT z[3][1] = { {M[0][2]*ydist}, {0.0}, {M[1][2]*ydist} };
+
+ // we know the distance into (or out of) the camera for the z axis,
+ // but we don't know which direction . . .
+ FLOAT x_y = sqrt(1.0 - x[0][0]*x[0][0] - x[2][0]*x[2][0]);
+ FLOAT y_y = sqrt(1.0 - y[0][0]*y[0][0] - y[2][0]*y[2][0]);
+ FLOAT z_y = sqrt(1.0 - z[0][0]*z[0][0] - z[2][0]*z[2][0]);
+
+ if( x_y != x_y ) x_y = 0;
+ if( y_y != y_y ) y_y = 0;
+ if( z_y != z_y ) z_y = 0;
+
+/*
+ // Exhaustively flip the minus sign of the z axis until we find the right one . . .
+ FLOAT bestErr = 9999.0;
+ FLOAT xy_dot2 = x[0][0]*y[0][0] + x[2][0]*y[2][0];
+ FLOAT yz_dot2 = y[0][0]*z[0][0] + y[2][0]*z[2][0];
+ FLOAT zx_dot2 = z[0][0]*x[0][0] + z[2][0]*x[2][0];
+ for (i=0;i<2;i++) {
+ for (j=0;j<2;j++) {
+ for(k=0;k<2;k++) {
+
+ // Calculate the error term
+ FLOAT xy_dot = xy_dot2 + x_y*y_y;
+ FLOAT yz_dot = yz_dot2 + y_y*z_y;
+ FLOAT zx_dot = zx_dot2 + z_y*x_y;
+ FLOAT err = _ABS(xy_dot) + _ABS(yz_dot) + _ABS(zx_dot);
+
+ // Calculate the handedness
+ FLOAT cx,cy,cz;
+ CrossProduct(cx,cy,cz,x[0][0],x_y,x[2][0],y[0][0],y_y,y[2][0]);
+ FLOAT hand = cx*z[0][0] + cy*z_y + cz*z[2][0];
+ printf("err %f hand %f\n", err, hand);
+
+ // If we are the best right-handed frame so far
+ //if (hand > 0 && err < bestErr) { x[1][0]=x_y; y[1][0]=y_y; z[1][0]=z_y; bestErr=err; }
+ if ( i == 0 && j == 1 && k == 0) { x[1][0]=x_y; y[1][0]=y_y; z[1][0]=z_y; bestErr=err; }
+ z_y = -z_y;
+ }
+ y_y = -y_y;
+ }
+ x_y = -x_y;
+ }
+ printf("bestErr %f\n", bestErr);
+*/
+
+ //-------------------------
+ // A test version of the rescaling to the proper length
+ //-------------------------
+ FLOAT ydist2;
+ FLOAT bestBestErr = 9999.0;
+ FLOAT bestYdist = 0;
+ for (ydist2=ydist-0.1; ydist2<ydist+0.1; ydist2+=0.0001)
+ {
+ FLOAT x2[3][1] = { {M[0][0]*ydist2}, {0.0}, {M[1][0]*ydist2} };
+ FLOAT y2[3][1] = { {M[0][1]*ydist2}, {0.0}, {M[1][1]*ydist2} };
+ FLOAT z2[3][1] = { {M[0][2]*ydist2}, {0.0}, {M[1][2]*ydist2} };
+
+ // we know the distance into (or out of) the camera for the z axis,
+ // but we don't know which direction . . .
+ FLOAT x_y = sqrt(1.0 - x2[0][0]*x2[0][0] - x2[2][0]*x2[2][0]);
+ FLOAT y_y = sqrt(1.0 - y2[0][0]*y2[0][0] - y2[2][0]*y2[2][0]);
+ FLOAT z_y = sqrt(1.0 - z2[0][0]*z2[0][0] - z2[2][0]*z2[2][0]);
+
+ // Exhaustively flip the minus sign of the z axis until we find the right one . . .
+ FLOAT bestErr = 9999.0;
+ FLOAT xy_dot2 = x2[0][0]*y2[0][0] + x2[2][0]*y2[2][0];
+ FLOAT yz_dot2 = y2[0][0]*z2[0][0] + y2[2][0]*z2[2][0];
+ FLOAT zx_dot2 = z2[0][0]*x2[0][0] + z2[2][0]*x2[2][0];
+ for (i=0;i<2;i++) {
+ for (j=0;j<2;j++) {
+ for(k=0;k<2;k++) {
+
+ // Calculate the error term
+ FLOAT xy_dot = xy_dot2 + x_y*y_y;
+ FLOAT yz_dot = yz_dot2 + y_y*z_y;
+ FLOAT zx_dot = zx_dot2 + z_y*x_y;
+ FLOAT err = _ABS(xy_dot) + _ABS(yz_dot) + _ABS(zx_dot);
+
+ // Calculate the handedness
+ FLOAT cx,cy,cz;
+ CrossProduct(cx,cy,cz,x2[0][0],x_y,x2[2][0],y2[0][0],y_y,y2[2][0]);
+ FLOAT hand = cx*z2[0][0] + cy*z_y + cz*z2[2][0];
+// printf("err %f hand %f\n", err, hand);
+
+ // If we are the best right-handed frame so far
+ if (hand > 0 && err < bestErr) { x2[1][0]=x_y; y2[1][0]=y_y; z2[1][0]=z_y; bestErr=err; }
+ z_y = -z_y;
+ }
+ y_y = -y_y;
+ }
+ x_y = -x_y;
+ }
+ printf("ydist2 %f bestErr %f\n",ydist2,bestErr);
+
+ if (bestErr < bestBestErr) {
+ memcpy(x,x2,3*sizeof(FLOAT));
+ memcpy(y,y2,3*sizeof(FLOAT));
+ memcpy(z,z2,3*sizeof(FLOAT));
+ bestBestErr = bestErr;
+ bestYdist = ydist2;
+ }
+ }
+ ydist = bestYdist;
+
+/*
+ for (i=0; i<nPoints; i++) {
+ float x1 = x[0][0]*X[0][i] + y[0][0]*X[1][i] + z[0][0]*X[2][i];
+ float y1 = x[1][0]*X[0][i] + y[1][0]*X[1][i] + z[1][0]*X[2][i];
+ float z1 = x[2][0]*X[0][i] + y[2][0]*X[1][i] + z[2][0]*X[2][i];
+ printf("x1z1 %f %f y1 %f\n", x1, z1, y1);
+ }
+*/
+/*
+ //--------------------
+ // Combine uhat and rhat to figure out the unit x-vector
+ //--------------------
+ FLOAT xhat[2][1] = { {0.0}, {1.0} };
+ FLOAT urhat[2][2] = {
+ {uhat[0][0], uhat[1][0]},
+ {rhat[0][0], rhat[1][0]} };
+ FLOAT inv_urhat[2][2];
+ FLOAT ab[2][1];
+ INV(urhat,inv_urhat,2);
+ MUL(inv_urhat,xhat,ab,2,2,1);
+PRINT(ab,2,1);
+ FLOAT a = ab[0][0], b = ab[1][0];
+
+ //-------------------
+ // calculate the xyz coordinate system
+ //-------------------
+ FLOAT y[3][1] = { {f[0][0]}, {f[1][0]}, {f[2][0]} };
+ FLOAT x[3][1] = { {a*u[0][0] + b*r[0][0]}, {a*u[1][0] + b*r[1][0]}, {a*u[2][0] + b*r[2][0]} };
+ FLOAT inv_xlen = 1.0 / sqrt( x[0][0]*x[0][0] + x[1][0]*x[1][0] + x[2][0]*x[2][0] );
+ x[0][0]*=inv_xlen; x[1][0]*=inv_xlen; x[2][0]*=inv_xlen;
+ FLOAT z[3][1];
+ CrossProduct(z[0][0],z[1][0],z[2][0],x[0][0],x[1][0],x[2][0],y[0][0],y[1][0],y[2][0]);
+*/
+ // Store into the rotation matrix
+ for (i=0; i<3; i++) { R[i][0] = x[i][0]; R[i][1] = y[i][0]; R[i][2] = z[i][0]; }
+//PRINT(R,3,3);
+
+ //-------------------
+ // Calculate the translation of the centroid
+ //-------------------
+ trans[0]=tan(sbar[0]); trans[1]=1.0; trans[2]=tan(sbar[1]);
+ FLOAT inv_translen = ydist / sqrt( trans[0]*trans[0] + trans[1]*trans[1] + trans[2]*trans[2] );
+ trans[0]*=inv_translen; trans[1]*=inv_translen; trans[2]*=inv_translen;
+
+ //-------------------
+ // Add in the centroid point
+ //-------------------
+ trans[0] -= xbar[0]*R[0][0] + xbar[1]*R[0][1] + xbar[2]*R[0][2];
+ trans[1] -= xbar[0]*R[1][0] + xbar[1]*R[1][1] + xbar[2]*R[1][2];
+ trans[2] -= xbar[0]*R[2][0] + xbar[1]*R[2][1] + xbar[2]*R[2][2];
+ FLOAT transdist = sqrt( trans[0]*trans[0] + trans[1]*trans[1] + trans[2]*trans[2] );
+
+ //-------------------
+ // Pack into the 4x4 transformation matrix
+ //-------------------
+ T[0][0]=R[0][0]; T[0][1]=R[0][1]; T[0][2]=R[0][2]; T[0][3]=trans[0];
+ T[1][0]=R[1][0]; T[1][1]=R[1][1]; T[1][2]=R[1][2]; T[1][3]=trans[1];
+ T[2][0]=R[2][0]; T[2][1]=R[2][1]; T[2][2]=R[2][2]; T[2][3]=trans[2];
+ T[3][0]=0.0; T[3][1]=0.0; T[3][2]=0.0; T[3][3]=1.0;
+
+ PRINT_MAT(T,4,4);
+ //-------------------
+ // Plot the output points
+ //-------------------
+ for (i=0; i<nPoints; i++) {
+ float Tx = T[0][0]*X_in[0][i] + T[0][1]*X_in[1][i] + T[0][2]*X_in[2][i] + T[0][3];
+ float Ty = T[1][0]*X_in[0][i] + T[1][1]*X_in[1][i] + T[1][2]*X_in[2][i] + T[1][3];
+ float Tz = T[2][0]*X_in[0][i] + T[2][1]*X_in[1][i] + T[2][2]*X_in[2][i] + T[2][3];
+ S_out[0][i] = atan2(Tx, Ty); // horiz
+ S_out[1][i] = atan2(Tz, Ty); // vert
+ //S_out[0][i] = Tx;
+ //S_out[1][i] = Tz;
+ printf("point %i Txyz %f %f %f in %f %f out %f %f morph %f %f\n", i, Tx,Ty,Tz, S_in[0][i], S_in[1][i], S_out[0][i], S_out[1][i], S_morph[0][i], S_morph[1][i]);
+ }
+
+
+
+
+ float quat[4];
+ float posoff[3] = { trans[0], trans[1], trans[2] };
+ float MT[4][4];
+ //matrix44transpose( MT, &T[0][0] );
+ matrix44copy( &MT[0][0], &T[0][0] );
+
+//QUAT: 0.657864 -0.305763 0.128486 0.265895 = 0.783252
+//QUAT: 0.657864 0.305763 -0.128486 -0.265895 = 0.783252
+
+
+ quatfrommatrix( quat, &MT[0][0] );
+ printf( "QUAT: %f %f %f %f = %f\n", quat[0], quat[1], quat[2], quat[3], quatmagnitude(quat) );
+ //quat[2] -= 0.005; //fixes up lh0 in test data set.
+ quatnormalize( quat, quat );
+ printf( "QUAT: %f %f %f %f = %f\n", quat[0], quat[1], quat[2], quat[3], quatmagnitude(quat) );
+
+
+ for( i = 0; i <nPoints;i++ )
+ {
+ float pt[3] = { X_in[0][i], X_in[1][i], X_in[2][i] };
+ quatrotatevector( pt, quat, pt );
+ add3d( pt, pt, posoff );
+ printf( "%f %f %f OUT %f %f %f ANGLE %f %f AOUT %f %f\n",
+ X_in[0][i], X_in[1][i], X_in[2][i], pt[0], pt[1], pt[2],
+ S_in[0][i], S_in[1][i], atan2( pt[0], pt[1] ), atan2( pt[2], pt[1] ) );
+ }
+ quattomatrix( &MT[0][0], quat );
+ PRINT_MAT(MT,4,4);
+
+
+
+// printf("xbar %f %f %f\n", xbar[0], xbar[1], xbar[2]);
+// printf("trans %f %f %f dist: %f\n", trans[0], trans[1], trans[2], transdist);
+}
+#endif
diff --git a/attic/dave/AffineSolve.c.CHARLES b/attic/dave/AffineSolve.c.CHARLES
new file mode 100644
index 0000000..cb62ef6
--- /dev/null
+++ b/attic/dave/AffineSolve.c.CHARLES
@@ -0,0 +1,643 @@
+//
+// main.c
+// Aff
+// Created by user on 3/2/17.
+// Copyright © 2017 user. All rights reserved.
+//
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include "dclapack.h"
+
+#define LH_ID 1
+#define NUM_HMD 32
+
+#define MAX_POINTS 128
+//#define _ABS(a) ( (a)<=0 ? -(a) : (a) )
+#define _SIGN(a) ( (a)<=0 ? -1.0f : 1.0f )
+#define RANDF ( (float)rand() / (float)RAND_MAX )
+#define PI 3.14159265358979323846264
+
+#define STEP_SIZE_ROT 1.0
+#define STEP_SIZE_POS 1.0
+#define FALLOFF 0.99999
+#define NITER 2000000
+#define TOO_SMALL 0.0001
+#define ORTHOG_PENALTY 1.0
+
+float hmd_pos[NUM_HMD][3];
+void ReadHmdPoints()
+{
+ int i;
+ FILE *fin = fopen("HMD_points.csv","r");
+ if (fin==NULL) {
+ printf("ERROR: could not open HMD_points.csv for reading\n");
+ exit(1);
+ }
+
+ for (i=0; i<NUM_HMD; i++) {
+ fscanf(fin, "%f %f %f", &(hmd_pos[i][0]), &(hmd_pos[i][1]), &(hmd_pos[i][2]));
+ }
+
+ fclose(fin);
+}
+
+float hmd_angle[NUM_HMD][2];
+void ReadPtinfo()
+{
+ // Initialize to -9999
+ int i;
+ for (i=0; i<NUM_HMD; i++) { hmd_angle[i][0]=-9999.0; hmd_angle[i][1]=-9999.0; }
+
+ // Read ptinfo.csv
+ FILE *fin = fopen("ptinfo.csv", "r");
+ if (fin==NULL) { printf("ERROR: could not open ptinfo.csv for reading\n"); exit(1); }
+ while (!feof(fin))
+ {
+ // Read the angle
+ int sen,lh,axis,count;
+ float angle, avglen, stddevang, stddevlen;
+ float max_outlier_length, max_outlier_angle;
+ int rt = fscanf( fin, "%d %d %d %d %f %f %f %f %f %f\n",
+ &sen, &lh, &axis, &count,
+ &angle, &avglen, &stddevang, &stddevlen,
+ &max_outlier_length, &max_outlier_angle);
+ if (rt != 10) { break; }
+
+ // If it's valid, store in the result
+ if (lh == LH_ID && sen < NUM_HMD) {
+ hmd_angle[sen][axis] = angle;
+ }
+ }
+ fclose(fin);
+}
+
+#define PRINT_MAT(A,M,N) { \
+ int m,n; \
+ printf(#A "\n"); \
+ for (m=0; m<M; m++) { \
+ for (n=0; n<N; n++) { \
+ printf("%f\t", A[m][n]); \
+ } \
+ printf("\n"); \
+ } \
+}
+
+#define CrossProduct(ox,oy,oz,a,b,c,x,y,z) { \
+ ox=(b)*(z)-(c)*(y); \
+ oy=(c)*(x)-(a)*(z); \
+ oz=(a)*(y)-(b)*(x); }
+
+void OrthoSolve(
+ float T[4][4], // OUTPUT: 4x4 transformation matrix
+ FLOAT S_out[2][MAX_POINTS], // OUTPUT: array of screenspace points
+ FLOAT S_in[2][MAX_POINTS], // INPUT: array of screenspace points
+ FLOAT X_in[3][MAX_POINTS], // INPUT: array of offsets
+ int nPoints)
+{
+ int i,j,k;
+ FLOAT R[3][3]; // OUTPUT: 3x3 rotation matrix
+ FLOAT trans[3]; // INPUT: x,y,z translation vector
+
+ //--------------------
+ // Remove the center of the HMD offsets, and the screen space
+ //--------------------
+ FLOAT xbar[3] = {0.0, 0.0, 0.0};
+ FLOAT sbar[2] = {0.0, 0.0};
+ FLOAT S[2][MAX_POINTS];
+ FLOAT X[3][MAX_POINTS];
+ FLOAT inv_nPoints = 1.0 / nPoints;
+ for (i=0; i<nPoints; i++) {
+ xbar[0] += X_in[0][i];
+ xbar[1] += X_in[1][i];
+ xbar[2] += X_in[2][i];
+ sbar[0] += S_in[0][i];
+ sbar[1] += S_in[1][i];
+ }
+ for (j=0; j<3; j++) { xbar[j] *= inv_nPoints; }
+ for (j=0; j<2; j++) { sbar[j] *= inv_nPoints; }
+ for (i=0; i<nPoints; i++) {
+ X[0][i] = X_in[0][i] - xbar[0];
+ X[1][i] = X_in[1][i] - xbar[1];
+ X[2][i] = X_in[2][i] - xbar[2];
+ S[0][i] = S_in[0][i] - sbar[0];
+ S[1][i] = S_in[1][i] - sbar[1];
+ }
+
+ //--------------------
+ // Solve for the morph matrix
+ // S = M X
+ // thus
+ // (SX^t)(XX^t)^-1 = M
+ //--------------------
+ FLOAT Xt[MAX_POINTS][3];
+ FLOAT XXt[3][3];
+ FLOAT invXXt[3][3];
+ FLOAT SXt[2][3];
+ FLOAT M[2][3]; // Morph matrix! (2 by 3)
+ TRANSP(X,Xt,3,nPoints);
+ MUL(X,Xt,XXt,3,nPoints,3);
+ MUL(S,Xt,SXt,2,nPoints,3);
+ INV(XXt,invXXt,3);
+ MUL(SXt,invXXt,M,2,3,3);
+//PRINT(M,2,3);
+
+// Double checking work
+FLOAT S_morph[2][MAX_POINTS];
+MUL(M,X,S_morph,2,3,nPoints);
+for (i=0; i<nPoints; i++) { S_morph[0][i]+=sbar[0]; S_morph[1][i]+=sbar[1]; }
+
+ //--------------------
+ // Solve for the non-trivial vector
+ // uf -- vector that goes into the camera
+ //--------------------
+ FLOAT uM[3][3] = {
+ { M[0][0], M[0][1], M[0][2] },
+ { M[1][0], M[1][1], M[1][2] },
+ { 3.14567, -1.2345, 4.32567 } }; // Morph matrix with appended row
+//PRINT(uM,3,3);
+// ToDo: Pick a number for the bottom that is NOT linearly separable with M[0] and M[1]
+ FLOAT B[3][1] = { {0.0}, {0.0}, {1.0} };
+ FLOAT inv_uM[3][3];
+ FLOAT uf[3][1];
+ INV(uM,inv_uM,3);
+ MUL(inv_uM,B,uf,3,3,1);
+
+ //--------------------
+ // Solve for unit length vector
+ // f that goes into the camera
+ //--------------------
+ FLOAT uf_len = sqrt( uf[0][0]*uf[0][0] + uf[1][0]*uf[1][0] + uf[2][0]*uf[2][0] );
+ FLOAT f[3][1] = { {uf[0][0]/uf_len}, {uf[1][0]/uf_len}, {uf[2][0]/uf_len} };
+ printf( "FFF: {%f %f %f}: %f\n", f[0][0], f[1][0], f[2][0], uf_len );
+//PRINT(uf,3,1);
+//PRINT(f,3,1);
+
+//FLOAT check[3][1];
+//MUL(uM,uf,check,3,3,1);
+//PRINT(check,3,1);
+
+ //--------------------
+ // take cross products to get vectors u,r
+ //--------------------
+ FLOAT u[3][1], r[3][1];
+ CrossProduct(u[0][0],u[1][0],u[2][0],f[0][0],f[1][0],f[2][0],1.0,0.0,0.0);
+ FLOAT inv_ulen = 1.0 / sqrt( u[0][0]*u[0][0] + u[1][0]*u[1][0] + u[2][0]*u[2][0] );
+ u[0][0]*=inv_ulen; u[1][0]*=inv_ulen; u[2][0]*=inv_ulen;
+ CrossProduct(r[0][0],r[1][0],r[2][0],f[0][0],f[1][0],f[2][0],u[0][0],u[1][0],u[2][0]);
+//PRINT(u,3,1);
+//PRINT(r,3,1);
+
+ //--------------------
+ // Use morph matrix to get screen space
+ // uhat,rhat
+ //--------------------
+ FLOAT uhat[2][1], rhat[2][1], fhat[2][1];
+ MUL(M,f,fhat,2,3,1);
+ MUL(M,u,uhat,2,3,1);
+ MUL(M,r,rhat,2,3,1);
+ FLOAT fhat_len = sqrt( fhat[0][0]*fhat[0][0] + fhat[1][0]*fhat[1][0] );
+ FLOAT uhat_len = sqrt( uhat[0][0]*uhat[0][0] + uhat[1][0]*uhat[1][0] );
+ FLOAT rhat_len = sqrt( rhat[0][0]*rhat[0][0] + rhat[1][0]*rhat[1][0] );
+ FLOAT urhat_len = 0.5 * (uhat_len + rhat_len);
+/*
+printf("fhat %f %f (len %f)\n", fhat[0][0], fhat[1][0], fhat_len);
+printf("uhat %f %f (len %f)\n", uhat[0][0], uhat[1][0], uhat_len);
+printf("rhat %f %f (len %f)\n", rhat[0][0], rhat[1][0], rhat_len);
+*/
+ FLOAT ydist1 = 1.0 / uhat_len; //0.25*PI / uhat_len;
+ FLOAT ydist2 = 1.0 / rhat_len; //0.25*PI / rhat_len;
+ FLOAT ydist = 1.0 / urhat_len;
+ printf("ydist1 %f ydist2 %f ydist %f FH: %f\n", ydist1, ydist2, ydist, fhat_len);
+
+ //--------------------
+ // Rescale the axies to be of the proper length
+ //--------------------
+ FLOAT x[3][1] = { {M[0][0]*ydist}, {0.0}, {M[1][0]*ydist} };
+ FLOAT y[3][1] = { {M[0][1]*ydist}, {0.0}, {M[1][1]*ydist} };
+ FLOAT z[3][1] = { {M[0][2]*ydist}, {0.0}, {M[1][2]*ydist} };
+printf( "YDIST: %f\n", ydist );
+printf( "{%f %f, %f %f, %f %f}\n", x[0][0], x[2][0], y[0][0], y[2][0], z[0][0], z[2][0] );
+printf( "{%f, %f, %f}\n", x[0][0]*x[0][0]+x[2][0]*x[2][0], y[0][0]*y[0][0]+y[2][0]*y[2][0], z[0][0]*z[0][0]+z[2][0]*z[2][0] );
+ // we know the distance into (or out of) the camera for the z axis,
+ // but we don't know which direction . . .
+ FLOAT x_y = sqrt(1.0 - x[0][0]*x[0][0] - x[2][0]*x[2][0]);
+ FLOAT y_y = sqrt(1.0 - y[0][0]*y[0][0] - y[2][0]*y[2][0]);
+ FLOAT z_y = sqrt(1.0 - z[0][0]*z[0][0] - z[2][0]*z[2][0]);
+printf( "{%f %f %f}\n", x_y, y_y, z_y );
+ // Exhaustively flip the minus sign of the z axis until we find the right one . . .
+ FLOAT bestErr = 9999.0;
+ FLOAT xy_dot2 = x[0][0]*y[0][0] + x[2][0]*y[2][0];
+ FLOAT yz_dot2 = y[0][0]*z[0][0] + y[2][0]*z[2][0];
+ FLOAT zx_dot2 = z[0][0]*x[0][0] + z[2][0]*x[2][0];
+ for (i=0;i<2;i++) {
+ for (j=0;j<2;j++) {
+ for(k=0;k<2;k++) {
+
+ // Calculate the error term
+ FLOAT xy_dot = xy_dot2 + x_y*y_y;
+ FLOAT yz_dot = yz_dot2 + y_y*z_y;
+ FLOAT zx_dot = zx_dot2 + z_y*x_y;
+ FLOAT err = _ABS(xy_dot) + _ABS(yz_dot) + _ABS(zx_dot);
+
+ // Calculate the handedness
+ FLOAT cx,cy,cz;
+ CrossProduct(cx,cy,cz,x[0][0],x_y,x[2][0],y[0][0],y_y,y[2][0]);
+ FLOAT hand = cx*z[0][0] + cy*y_y + cz*z[2][0];
+ printf("err %f hand %f\n", err, hand);
+
+ // If we are the best right-handed frame so far
+ if (err < bestErr) { x[1][0]=x_y; y[1][0]=y_y; z[1][0]=z_y; bestErr=err; }
+ //if (i == 1 && j == 1 && k == 1) { x[1][0]=x_y; y[1][0]=y_y; z[1][0]=z_y; bestErr=err; }
+ z_y = -z_y;
+ }
+ y_y = -y_y;
+ }
+ x_y = -x_y;
+ }
+ printf("bestErr %f\n", bestErr);
+/*
+ for (i=0; i<nPoints; i++) {
+ float x1 = x[0][0]*X[0][i] + y[0][0]*X[1][i] + z[0][0]*X[2][i];
+ float y1 = x[1][0]*X[0][i] + y[1][0]*X[1][i] + z[1][0]*X[2][i];
+ float z1 = x[2][0]*X[0][i] + y[2][0]*X[1][i] + z[2][0]*X[2][i];
+ printf("x1z1 %f %f y1 %f\n", x1, z1, y1);
+ }
+*/
+/*
+ //--------------------
+ // Combine uhat and rhat to figure out the unit x-vector
+ //--------------------
+ FLOAT xhat[2][1] = { {0.0}, {1.0} };
+ FLOAT urhat[2][2] = {
+ {uhat[0][0], uhat[1][0]},
+ {rhat[0][0], rhat[1][0]} };
+ FLOAT inv_urhat[2][2];
+ FLOAT ab[2][1];
+ INV(urhat,inv_urhat,2);
+ MUL(inv_urhat,xhat,ab,2,2,1);
+PRINT(ab,2,1);
+ FLOAT a = ab[0][0], b = ab[1][0];
+
+ //-------------------
+ // calculate the xyz coordinate system
+ //-------------------
+ FLOAT y[3][1] = { {f[0][0]}, {f[1][0]}, {f[2][0]} };
+ FLOAT x[3][1] = { {a*u[0][0] + b*r[0][0]}, {a*u[1][0] + b*r[1][0]}, {a*u[2][0] + b*r[2][0]} };
+ FLOAT inv_xlen = 1.0 / sqrt( x[0][0]*x[0][0] + x[1][0]*x[1][0] + x[2][0]*x[2][0] );
+ x[0][0]*=inv_xlen; x[1][0]*=inv_xlen; x[2][0]*=inv_xlen;
+ FLOAT z[3][1];
+ CrossProduct(z[0][0],z[1][0],z[2][0],x[0][0],x[1][0],x[2][0],y[0][0],y[1][0],y[2][0]);
+*/
+ // Store into the rotation matrix
+ for (i=0; i<3; i++) { R[i][0] = x[i][0]; R[i][1] = y[i][0]; R[i][2] = z[i][0]; }
+//PRINT(R,3,3);
+
+ //-------------------
+ // Calculate the translation of the centroid
+ //-------------------
+ trans[0]=tan(sbar[0]); trans[1]=1.0; trans[2]=tan(sbar[1]);
+ FLOAT inv_translen = ydist / sqrt( trans[0]*trans[0] + trans[1]*trans[1] + trans[2]*trans[2] );
+ trans[0]*=inv_translen; trans[1]*=inv_translen; trans[2]*=inv_translen;
+
+ //-------------------
+ // Add in the centroid point
+ //-------------------
+ trans[0] -= xbar[0]*R[0][0] + xbar[1]*R[0][1] + xbar[2]*R[0][2];
+ trans[1] -= xbar[0]*R[1][0] + xbar[1]*R[1][1] + xbar[2]*R[1][2];
+ trans[2] -= xbar[0]*R[2][0] + xbar[1]*R[2][1] + xbar[2]*R[2][2];
+ FLOAT transdist = sqrt( trans[0]*trans[0] + trans[1]*trans[1] + trans[2]*trans[2] );
+
+ //-------------------
+ // Pack into the 4x4 transformation matrix
+ //-------------------
+ T[0][0]=R[0][0]; T[0][1]=R[0][1]; T[0][2]=R[0][2]; T[0][3]=trans[0];
+ T[1][0]=R[1][0]; T[1][1]=R[1][1]; T[1][2]=R[1][2]; T[1][3]=trans[1];
+ T[2][0]=R[2][0]; T[2][1]=R[2][1]; T[2][2]=R[2][2]; T[2][3]=trans[2];
+ T[3][0]=0.0; T[3][1]=0.0; T[3][2]=0.0; T[3][3]=1.0;
+
+ //-------------------
+ // Plot the output points
+ //-------------------
+ for (i=0; i<nPoints; i++) {
+ float Tx = T[0][0]*X_in[0][i] + T[0][1]*X_in[1][i] + T[0][2]*X_in[2][i] + T[0][3];
+ float Ty = T[1][0]*X_in[0][i] + T[1][1]*X_in[1][i] + T[1][2]*X_in[2][i] + T[1][3];
+ float Tz = T[2][0]*X_in[0][i] + T[2][1]*X_in[1][i] + T[2][2]*X_in[2][i] + T[2][3];
+ S_out[0][i] = atan2(Tx, Ty); // horiz
+ S_out[1][i] = atan2(Tz, Ty); // vert
+ //S_out[0][i] = Tx;
+ //S_out[1][i] = Tz;
+ printf("point %i Txyz %f %f %f in %f %f out %f %f morph %f %f\n", i, Tx,Ty,Tz, S_in[0][i], S_in[1][i], S_out[0][i], S_out[1][i], S_morph[0][i], S_morph[1][i]);
+ }
+
+// printf("xbar %f %f %f\n", xbar[0], xbar[1], xbar[2]);
+// printf("trans %f %f %f dist: %f\n", trans[0], trans[1], trans[2], transdist);
+}
+
+void AffineSolve(
+ float T[4][4], // OUTPUT: transform
+ float O[MAX_POINTS][4], // INPUT: points, offsets
+ float N[MAX_POINTS][3], // INPUT: plane normals
+ float D[MAX_POINTS], // INPUT: plane offsets
+ int nPoints, int nIter,
+ float stepSizeRot, float stepSizePos, float falloff, int constrain)
+{
+ int i,j,k,iter;
+ //T[3][3] = 1.0f;
+
+ printf("iter x y z error\n");
+
+ float gradDot = 1.0;
+ float prevGradDot = 1.0;
+ float de_dT[3][4]; // the gradient
+ float conj[3][4]; // the conjugate
+ float errorSq=0.0;
+ for (iter=0; iter<nIter; iter++)
+ {
+ //----------------------------------
+ // Calculate the gradient direction
+ //----------------------------------
+ errorSq = 0.0;
+ memset(de_dT, 0, 3*4*sizeof(float));
+ for (i=0; i<nPoints; i++)
+ {
+ // What is the plane deviation error
+ float Ei = -D[i];
+ for (j=0; j<3; j++) {
+ float Tj_oi = 0.0f;
+ for (k=0; k<4; k++) {
+ Tj_oi += T[j][k] * O[i][k];
+ }
+ Ei += N[i][j] * Tj_oi;
+ }
+// printf("E[%d] %f\n", i, Ei);
+
+ // Figure out contribution to the error
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ de_dT[j][k] += N[i][j] * O[i][k] * Ei;
+ }
+ }
+
+ errorSq += Ei*Ei;
+ }
+
+// printf("%d %f %f %f %f\n", iter, T[0][3], T[1][3], T[2][3], sqrt(errorSq));
+//exit(1);
+ // Constrain the gradient (such that dot products are zero)
+ if (constrain)
+ {
+ float T0T1 = 0.0, T1T2 = 0.0, T2T0 = 0.0;
+ for (k=0; k<3; k++) {
+ T0T1 += T[0][k] * T[1][k];
+ T1T2 += T[1][k] * T[2][k];
+ T2T0 += T[2][k] * T[0][k];
+ }
+// printf("T0T1 %f T1T2 %f T2T0 %f\n", T0T1, T1T2, T2T0);
+ for (k=0; k<3; k++) {
+ de_dT[0][k] += ORTHOG_PENALTY * 2.0 * T0T1 * T[1][k];
+ de_dT[0][k] += ORTHOG_PENALTY * 2.0 * T2T0 * T[2][k];
+ de_dT[1][k] += ORTHOG_PENALTY * 2.0 * T1T2 * T[2][k];
+ de_dT[1][k] += ORTHOG_PENALTY * 2.0 * T0T1 * T[0][k];
+ de_dT[2][k] += ORTHOG_PENALTY * 2.0 * T1T2 * T[1][k];
+ de_dT[2][k] += ORTHOG_PENALTY * 2.0 * T2T0 * T[0][k];
+ }
+ }
+
+ // Calculate the gradient dot product
+ // (used by conjugate gradient method)
+ prevGradDot = gradDot;
+ gradDot = 0.0;
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ gradDot += de_dT[j][k] * de_dT[j][k];
+ }
+ }
+
+// printf("Iter %d error %f gradDot %f prevGradDot %f\n", iter, sqrt(errorSq), gradDot, prevGradDot);
+
+ //----------------------------------
+ // Calculate the conjugate direction
+ //----------------------------------
+// if (iter==0) {
+ // First iteration, just use the gradient
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ conj[j][k] = -de_dT[j][k];
+ }
+ }
+/* } else {
+ // Calculate "beta" for Fletcher Reeves method
+ float beta = gradDot / prevGradDot;
+//printf("gradDot %f prevGradDot %f beta %f\n", gradDot, prevGradDot, beta);
+
+ // Update the conjugate
+ for (j=0; j<3; j++) {
+ for (k=0; k<4; k++) {
+ conj[j][k] = beta*conj[j][k] - de_dT[j][k];
+ }
+ }
+ }
+*/
+
+// PRINT_MAT(de_dT,4,4);
+// exit(1);
+
+ //----------------------------------
+ // How large is the gradient ?
+ //----------------------------------
+
+ double gradSizeRot = 0.0;
+ double gradSizePos = 0.0;
+ for (j=0; j<3; j++) {
+ for (k=0; k<3; k++) {
+ gradSizeRot += _ABS(conj[j][k]);
+ }
+ gradSizePos += _ABS(conj[j][k]);
+ }
+ if (gradSizeRot <= TOO_SMALL && gradSizePos <= TOO_SMALL) { break; } // Quit, we've totally converged
+
+ //----------------------------------
+ // Descend in the gradient direction
+ //----------------------------------
+ if (gradSizeRot > TOO_SMALL) {
+ float scaleRot = stepSizeRot / gradSizeRot;
+ for (j=0; j<3; j++) {
+ for (k=0; k<3; k++) {
+ T[j][k] += scaleRot * conj[j][k];
+ }
+ }
+ stepSizeRot *= falloff;
+ }
+
+ if (gradSizePos > TOO_SMALL) {
+ float scalePos = stepSizePos / gradSizePos;
+ for (j=0; j<3; j++) {
+ T[j][3] += scalePos * conj[j][3];
+ }
+ stepSizePos *= falloff;
+ }
+
+ // Constrain the gradient (such that scaling is one)
+ if (constrain)
+ {
+ // Measure the scales
+ float len[3] = {0.0, 0.0, 0.0};
+ for (j=0; j<3; j++) {
+ double lenSq = 0.0;
+ for (k=0; k<3; k++) { lenSq += (double)T[j][k] * (double)T[j][k]; }
+ len[j] = sqrt(lenSq);
+ }
+
+ // How far off is the scale?
+ float xzLen = 0.5 * (len[0] + len[2]);
+ if (xzLen > TOO_SMALL) {
+ float inv_xzLen = 1.0 / xzLen;
+ for (j=0; j<3; j++) {
+ T[3][j] *= inv_xzLen;
+ }
+ }
+
+ // Rescale the thing
+ for (j=0; j<3; j++)
+ {
+ if (len[j] > TOO_SMALL) {
+ float inv_len = 1.0 / len[j];
+ for (k=0; k<3; k++) { T[j][k] *= inv_len; }
+ }
+ }
+ }
+ }
+ float dist = sqrt(T[0][3]*T[0][3] + T[1][3]*T[1][3] + T[2][3]*T[2][3]);
+ printf("AffineSolve: pos: %f %f %f dist: %f\n", T[0][3], T[1][3], T[2][3], dist);
+}
+
+int main()
+{
+ int i,j,k,sen,axis;
+
+ // Read the data files
+ printf( "...\n" );
+ ReadHmdPoints();
+ ReadPtinfo();
+
+ //-------------------------
+ // Package the lighthouse data for "AffineSolve"
+ //-------------------------
+
+ // Data for the "iterative" affine solve formula
+ // float Tcalc[4][4];
+ float O[MAX_POINTS][4];
+ float N[MAX_POINTS][3];
+ float D[MAX_POINTS];
+ int nPlanes = 0;
+
+ for (sen=0; sen<NUM_HMD; sen++)
+ {
+ for (axis=0; axis<2; axis++)
+ {
+ if (hmd_angle[sen][axis] != -9999.0)
+ {
+ // Set the offset
+ O[nPlanes][0] = hmd_pos[sen][0];
+ O[nPlanes][1] = hmd_pos[sen][1];
+ O[nPlanes][2] = hmd_pos[sen][2];
+ O[nPlanes][3] = 1.0;
+
+ // Calculate the plane equation
+ if (axis == 0) { // Horizontal
+ N[nPlanes][0] = -cos(hmd_angle[sen][axis]);
+ N[nPlanes][1] = -sin(hmd_angle[sen][axis]);
+ N[nPlanes][2] = 0.0;
+ D[nPlanes] = 0.0;
+ } else { // Vertical
+ N[nPlanes][0] = 0.0;
+ N[nPlanes][1] = -sin(hmd_angle[sen][axis]);
+ N[nPlanes][2] = cos(hmd_angle[sen][axis]);
+ D[nPlanes] = 0.0;
+ }
+
+ printf("plane %d O %.3f %.3f %.3f %.3f N %.3f %.3f %.3f D %.3f\n",
+ nPlanes,
+ O[nPlanes][0], O[nPlanes][1], O[nPlanes][2], O[nPlanes][3],
+ N[nPlanes][0], N[nPlanes][1], N[nPlanes][2],
+ D[nPlanes]);
+ nPlanes++;
+ }
+ }
+ }
+
+
+ printf("nPlanes %d\n", nPlanes);
+
+ //}
+
+ //PRINT_MAT(Tcalc,4,4);
+
+
+ //--------------------------------------------------
+ // Package the data for "OrthoSolve"
+ //--------------------------------------------------
+
+ // Data for the "fake" ortho solve formula
+ float Tortho[4][4]; // OUTPUT: 4x4 transformation matrix
+ FLOAT S_out[2][MAX_POINTS]; // INPUT: array of screenspace points
+ FLOAT S_in[2][MAX_POINTS]; // INPUT: array of screenspace points
+ FLOAT X_in[3][MAX_POINTS]; // INPUT: array of offsets
+ int nPoints=0;
+
+ // Transform into the "OrthoSolve" format
+ for (sen=0; sen<NUM_HMD; sen++)
+ {
+ if (hmd_angle[sen][0] != -9999.0 && hmd_angle[sen][1] != -9999.0)
+ {
+ S_in[0][nPoints] = hmd_angle[sen][0];
+ S_in[1][nPoints] = hmd_angle[sen][1];
+ X_in[0][nPoints] = hmd_pos[sen][0];
+ X_in[1][nPoints] = hmd_pos[sen][1];
+ X_in[2][nPoints] = hmd_pos[sen][2];
+ nPoints++;
+ }
+ }
+ printf("OrthoSolve nPoints %d\n", nPoints);
+
+ //--------------------------------------------------
+ // Run the "OrthoSolve" and then the "AffineSolve"
+ //--------------------------------------------------
+
+ int loop;
+ // for (loop=0; loop<1000000; loop++)
+ {
+ // Run OrthoSolve
+ OrthoSolve(
+ Tortho, // OUTPUT: 4x4 transformation matrix
+ S_out, // OUTPUT: array of output screenspace points
+ S_in, // INPUT: array of screenspace points
+ X_in, // INPUT: array of offsets
+ nPoints);
+ }
+
+ // Run the calculation for Tcalc
+ //int run;
+ //for (run=0; run<100; run++) {
+/*
+ // Initialize Tcalc to the identity matrix
+ memcpy(Tcalc, Tortho, 4*4*sizeof(float));
+ //memset(Tcalc, 0, 4*4*sizeof(float));
+ //for (i=0; i<4; i++) { Tcalc[i][i] = 1.0f; }
+
+ // Solve it!
+ AffineSolve(
+ Tcalc, // OUTPUT: transform
+ O, // INPUT: points, offsets
+ N, // INPUT: plane normals
+ D, // INPUT: plane offsets
+ nPlanes, NITER,
+ STEP_SIZE_ROT, STEP_SIZE_POS, FALLOFF,
+ 1);
+*/
+ // insert code here...
+ return 0;
+}
diff --git a/attic/dave/HMD_normals.csv b/attic/dave/HMD_normals.csv
new file mode 100644
index 0000000..9abb886
--- /dev/null
+++ b/attic/dave/HMD_normals.csv
@@ -0,0 +1,32 @@
+0.656529 0.080037 0.750042
+1.000000 0.000000 0.000000
+0.951033 0.192296 -0.241987
+0.863341 0.261141 -0.431796
+0.562083 0.827080 -0.000702
+0.556742 0.818617 -0.141085
+0.127514 0.360969 0.923819
+0.197328 0.721208 0.664019
+0.197328 -0.720504 0.664783
+0.460200 0.003066 0.887810
+0.025263 -0.748333 0.662842
+0.556742 -0.818766 -0.140217
+0.562083 -0.827081 0.000175
+0.863341 -0.261598 -0.431519
+0.951034 -0.192552 -0.241783
+0.656529 -0.079242 0.750127
+-0.197328 0.721208 0.664019
+-0.127514 0.360969 0.923819
+-0.556742 0.818617 -0.141085
+-0.562083 0.827080 -0.000702
+-0.863341 0.261141 -0.431796
+-0.951033 0.192296 -0.241987
+-1.000000 0.000000 0.000000
+-0.656529 0.080037 0.750042
+-0.656529 -0.079242 0.750127
+-0.951034 -0.192552 -0.241783
+-0.863341 -0.261598 -0.431519
+-0.562083 -0.827081 0.000175
+-0.556742 -0.818766 -0.140217
+-0.025263 -0.748333 0.662842
+-0.460200 0.003066 0.887810
+-0.197328 -0.720504 0.664783
diff --git a/attic/dave/HMD_points.csv b/attic/dave/HMD_points.csv
new file mode 100644
index 0000000..9c8f61d
--- /dev/null
+++ b/attic/dave/HMD_points.csv
@@ -0,0 +1,32 @@
+0.085242 0.017104 0.046493
+0.093076 -0.000052 0.035027
+0.086979 0.016748 0.020598
+0.089932 0.029368 0.029518
+0.080100 0.045401 0.034918
+0.050949 0.052772 0.033339
+0.024403 0.019970 0.059476
+0.047578 0.033637 0.053722
+0.047777 -0.034022 0.053513
+0.057882 -0.000007 0.056592
+0.027400 -0.051728 0.046844
+0.051043 -0.052940 0.032966
+0.080512 -0.045486 0.034783
+0.090041 -0.029387 0.029598
+0.086948 -0.016462 0.020596
+0.085268 -0.017169 0.046332
+-0.047738 0.033671 0.053643
+-0.024283 0.020141 0.059533
+-0.050979 0.052769 0.033118
+-0.080175 0.045313 0.034850
+-0.090020 0.029306 0.029481
+-0.087090 0.016787 0.020453
+-0.093113 0.000154 0.034906
+-0.085269 0.017293 0.046345
+-0.085128 -0.017079 0.046558
+-0.086970 -0.016675 0.020667
+-0.089911 -0.029458 0.029795
+-0.080444 -0.045268 0.034661
+-0.051102 -0.052996 0.033321
+-0.027283 -0.051820 0.046794
+-0.057974 -0.000051 0.056586
+-0.047652 -0.033921 0.053604
diff --git a/attic/dave/Makefile b/attic/dave/Makefile
new file mode 100644
index 0000000..330bda3
--- /dev/null
+++ b/attic/dave/Makefile
@@ -0,0 +1,21 @@
+UNAME:=$(shell uname)
+
+CFLAGS:= -lm -I../redist -I../src -I../include/libsurvive
+
+ifeq ($(UNAME), Linux)
+CFLAGS:= $(CFLAGS) -lGL -lGLU -lglut -lX11 -I../../redist -DLINUX -lm -lpthread -DLINUX
+endif
+
+# Darwin is Mac OSX !!
+ifeq ($(UNAME), Darwin)
+CFLAGS:= $(CFLAGS) -I../../redist -w -framework OpenGL -framework GLUT
+endif
+
+
+all:
+# gcc -O3 -o kalman_filter kalman_filter.c main.c
+ gcc -O3 -o dclapack_test dclapack_test.c $(CFLAGS)
+ gcc -O3 -o AffineSolve AffineSolve.c $(CFLAGS) ../redist/linmath.c #-Wall
+ gcc -O3 -o OrthoPlot OrthoPlot.c fileutil.c ../redist/linmath.c ../redist/os_generic.c $(CFLAGS)
+clean:
+ rm -f kalman_filter dclapack_test
diff --git a/attic/dave/OrthoPlot.c b/attic/dave/OrthoPlot.c
new file mode 100644
index 0000000..222828c
--- /dev/null
+++ b/attic/dave/OrthoPlot.c
@@ -0,0 +1,451 @@
+/*
+ When creating your project, uncheck OWL,
+ uncheck Class Library, select Static
+ instead of Dynamic and change the target
+ model to Console from GUI.
+ Also link glut.lib to your project once its done.
+ */
+
+#include <stdio.h> // Standard Header For Most Programs
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "os_generic.h"
+#include "linmath.h"
+#include "fileutil.h"
+
+#ifdef __APPLE__
+#include <OpenGL/gl.h> // The GL Header File
+#include <GLUT/glut.h> // The GL Utility Toolkit (Glut) Header
+#else
+#include <GL/gl.h>
+#include <GL/glu.h>
+#endif
+#ifdef __linux__
+#include <GL/freeglut.h>
+#endif
+
+#define RegisterDriver(a,b)
+#include "poser_daveortho.c"
+
+
+// Required to set up a window
+#define WIDTH 1280
+#define HEIGHT 1280
+#define FULLSCREEN 0
+int keys[256]; // Regular keyboard keys
+int sp_keys[256]; // Special keyboard keycodes (GLUT specific)
+
+#define LH_ID 0
+#define NUM_HMD 32
+#define INDIR "dave/full_test_triangle_on_floor/"
+#define MAX_POINTS SENSORS_PER_OBJECT
+
+#define PI 3.1415926535897932386264
+#define MOVESPEED 1.0
+#define ROTSPEED 5.0
+
+// View space
+float posx=0.0f;
+float posy=0.0f;
+float posz=0.0f;
+float rotx=0.0f;
+float roty=0.0f;
+float rotz=0.0f;
+
+// Data for the "fake" ortho solve formula
+float Tortho[4][4]; // OUTPUT: 4x4 transformation matrix
+FLOAT S_out[2][MAX_POINTS]; // INPUT: array of screenspace points
+FLOAT S_in[2][MAX_POINTS]; // INPUT: array of screenspace points
+FLOAT X_in[3][MAX_POINTS]; // INPUT: array of offsets
+int nPoints=0;
+
+//--------------------------------------------------------------------
+//
+//--------------------------------------------------------------------
+
+void DrawGrid(
+ float minX, float maxX,
+ float minY, float maxY,
+ float minZ, float maxZ,
+ float stepX, float stepY, float stepZ);
+
+void DrawCoordinateSystem(
+ float x, float y, float z,
+ float qx, float qy, float qz, float qr);
+
+
+float hmd_pos[NUM_HMD][3];
+void ReadHmdPoints()
+{
+ int i;
+ FILE *fin = fopen(INDIR "HMD_points.csv","r");
+ if (fin==NULL) {
+ printf("ERROR: could not open " INDIR "HMD_points.csv for reading\n");
+ exit(1);
+ }
+
+ for (i=0; i<NUM_HMD; i++) {
+ fscanf(fin, "%f %f %f", &(hmd_pos[i][0]), &(hmd_pos[i][1]), &(hmd_pos[i][2]));
+ }
+
+ fclose(fin);
+}
+
+float hmd_angle[NUM_HMD][2];
+void ReadPtinfo()
+{
+ // Initialize to -9999
+ int i;
+ for (i=0; i<NUM_HMD; i++) { hmd_angle[i][0]=-9999.0; hmd_angle[i][1]=-9999.0; }
+
+ // Read ptinfo.csv
+ FILE *fin = fopen(INDIR "ptinfo.csv", "r");
+ if (fin==NULL) { printf("ERROR: could not open ptinfo.csv for reading\n"); exit(1); }
+ while (!feof(fin))
+ {
+ // Read the angle
+ int sen,lh,axis,count;
+ float angle, avglen, stddevang, stddevlen;
+ float max_outlier_length, max_outlier_angle;
+ int rt = fscanf( fin, "%d %d %d %d %f %f %f %f %f %f\n",
+ &sen, &lh, &axis, &count,
+ &angle, &avglen, &stddevang, &stddevlen,
+ &max_outlier_length, &max_outlier_angle);
+ if (rt != 10) { break; }
+
+ // If it's valid, store in the result
+ if (lh == LH_ID && sen < NUM_HMD) {
+ hmd_angle[sen][axis] = angle;
+ }
+ }
+ fclose(fin);
+}
+
+
+//--------------------------------------------------------------------
+//
+//--------------------------------------------------------------------
+
+/*
+ * init() is called at program startup
+ */
+void init()
+{
+ int i,j,k,sen,axis;
+
+ // Read the data files
+ ReadHmdPoints();
+ ReadPtinfo();
+
+ //--------------------------------------------------
+ // Package the data for "OrthoSolve"
+ //--------------------------------------------------
+
+ // Transform into the "OrthoSolve" format
+ for (sen=0; sen<NUM_HMD; sen++)
+ {
+ if (hmd_angle[sen][0] != -9999.0 && hmd_angle[sen][1] != -9999.0)
+ {
+ S_in[0][nPoints] = hmd_angle[sen][0];
+ S_in[1][nPoints] = hmd_angle[sen][1];
+ X_in[0][nPoints] = hmd_pos[sen][0];
+ X_in[1][nPoints] = hmd_pos[sen][1];
+ X_in[2][nPoints] = hmd_pos[sen][2];
+ nPoints++;
+ }
+ }
+ printf("OrthoSolve nPoints %d\n", nPoints);
+ //--------------------------------------------------
+ // Run the "OrthoSolve" and then the "AffineSolve"
+ //--------------------------------------------------
+
+ // Run OrthoSolve
+ OrthoSolve(
+ Tortho, // OUTPUT: 4x4 transformation matrix
+ S_out, // OUTPUT: array of output screenspace points
+ S_in, // INPUT: array of screenspace points
+ X_in, // INPUT: array of offsets
+ nPoints);
+ //printf( "POS: %f %f %f\n", Tortho[0][3], Tortho[1][3], Tortho[2][3]);
+
+ //--------------------------------------------------
+ // Spawn a thread to read the HMD angles
+ //--------------------------------------------------
+ OGCreateThread(ThreadReadHmtAngles,0);
+
+ //--------------------------------------------------
+ // Initialize OpenGL
+ //--------------------------------------------------
+ glShadeModel(GL_SMOOTH); // Enable Smooth Shading
+ glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Black Background
+ glClearDepth(1.0f); // Depth Buffer Setup
+ glEnable(GL_DEPTH_TEST); // Enables Depth Testing
+ glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
+ glEnable ( GL_COLOR_MATERIAL );
+ glDisable(GL_CULL_FACE);
+ glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
+}
+
+/*
+ * draw() is called once every frame
+ */
+void draw()
+{
+ int i,j;
+
+ //------------------------
+ // Check for keyboard input
+ //------------------------
+ if (keys['w'] || keys['W']) {
+ posz += MOVESPEED;
+ }
+ if (keys['s'] || keys['S']) {
+ posz -= MOVESPEED;
+ }
+ if (keys['a'] || keys['A']) {
+ roty += ROTSPEED;
+ }
+ if (keys['d'] || keys['D']) {
+ roty -= ROTSPEED;
+ }
+ if (keys[27]) {
+ exit(0);
+ }
+
+ //------------------------
+ // Update the scene
+ //------------------------
+
+ //------------------------
+ // Draw using OpenGL
+ //------------------------
+
+ // Clear the screen
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
+
+ // Translate and rotate the camera
+ glLoadIdentity(); // Reset The Current Modelview Matrix
+// glTranslatef(-posx,-posy,posz); // Move Left 1.5 Units And Into The
+
+ // Bouning box around the points (in radians)
+ float x0=-45.0 * (PI/180.0);
+ float x1= 45.0 * (PI/180.0);
+ float y0=-45.0 * (PI/180.0);
+ float y1= 45.0 * (PI/180.0);
+
+
+ //------------------------
+ // Read the angles from stdin
+ //------------------------
+ FLT hmdAngles[4][NUM_HMD];
+
+ // Read the hmd angles
+ OGLockMutex(read_mutex);
+ for (i=0; i<4; i++) {
+ for (j=0; j<NUM_HMD; j++) {
+ hmdAngles[i][j] = read_hmdAngles[i][j];
+ }
+ }
+ OGUnlockMutex(read_mutex);
+
+ // Draw the hmd bearing angles
+ nPoints=0;
+ for (i=0; i<NUM_HMD; i++) {
+ const double dist=10.0;
+
+ int sweepx = (LH_ID==0) ? SWEEP_LX : SWEEP_RX;
+ int sweepy = (LH_ID==0) ? SWEEP_LY : SWEEP_RY;
+
+ // If the left lighthouse sees it
+ if (read_hmdAngleViewed[sweepx][i] >= read_frameno-6 &&
+ read_hmdAngleViewed[sweepy][i] >= read_frameno-6 &&
+ hmdAngles[sweepx][i]!=-9999.0 && hmdAngles[sweepy][i]!=-9999.0)
+ {
+ S_in[0][nPoints] = hmdAngles[sweepy][i];
+ S_in[1][nPoints] = hmdAngles[sweepx][i];
+ X_in[0][nPoints] = hmd_pos[i][0];
+ X_in[1][nPoints] = hmd_pos[i][1];
+ X_in[2][nPoints] = hmd_pos[i][2];
+printf("i %d S %f %f X %f %f %f frno %d %d currfr %d\n",
+ i, S_in[0][nPoints], S_in[1][nPoints],
+ X_in[0][nPoints], X_in[1][nPoints], X_in[2][nPoints],
+ read_hmdAngleViewed[sweepx][i], read_hmdAngleViewed[sweepy][i], read_frameno);
+ nPoints++;
+ }
+ }
+
+ read_frameno++;
+
+ //--------------------------------------------------
+ // Run the "OrthoSolve" and then the "AffineSolve"
+ //--------------------------------------------------
+
+ // Run OrthoSolve
+ OrthoSolve(
+ Tortho, // OUTPUT: 4x4 transformation matrix
+ S_out, // OUTPUT: array of output screenspace points
+ S_in, // INPUT: array of screenspace points
+ X_in, // INPUT: array of offsets
+ nPoints);
+ printf( "POS: %f %f %f\n", Tortho[0][3], Tortho[1][3], Tortho[2][3]);
+
+
+ //------------------------
+ // Draw the inputs
+ //------------------------
+ glPointSize(3.0);
+
+ // Draw the input points
+ glColor3f(1.0,0.5,0.5);
+ glBegin(GL_POINTS);
+ for (i=0; i<nPoints; i++) {
+ glVertex2f( (S_in[0][i]-x0)/(x1-x0), (S_in[1][i]-y0)/(y1-y0) );
+ }
+ glEnd();
+
+ // Draw the output points
+ glColor3f(0.5,0.5,1.0);
+ glBegin(GL_POINTS);
+ for (i=0; i<nPoints; i++) {
+ glVertex2f( (S_out[0][i]-x0)/(x1-x0), (S_out[1][i]-y0)/(y1-y0) );
+ }
+ glEnd();
+
+
+ //
+ // We're Done
+ //
+ glutSwapBuffers ( ); // Swap The Buffers To Not Be Left With A Clear Screen
+}
+
+/*
+ * resize() is called when we change the screen size
+ */
+void resize(int width, int height) // Resize And Initialize The GL Window
+{
+ glViewport(0,0,width,height); // Reset The Current Viewport
+
+ glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
+ glLoadIdentity(); // Reset The Projection Matrix
+
+ // Uncomment For a 3D perspective
+ //gluPerspective(45.0f,(float)width/(float)height,0.1f,1000.0f);
+ // Uncomment for a 2D perspective
+ glOrtho(0.0, 1.0, 0.0, 1.0, -10.0, 10.0);
+
+ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ glLoadIdentity(); // Reset The Modelview Matrix
+}
+
+/*
+ * These functions are called whenever a key is pressed
+ */
+void keyboardDown ( unsigned char key, int x, int y ) // Create Keyboard Function
+{
+ keys[key] = 1;
+}
+void keyboardUp ( unsigned char key, int x, int y )
+{
+ keys[key] = 0;
+}
+
+void specialKeyDown ( int key, int x, int y ) // Create Special Function (required for arrow keys)
+{
+ if (key<256) {
+ sp_keys[key] = 1;
+ }
+}
+void specialKeyUp (int key, int x, int y)
+{
+ if (key<256) {
+ sp_keys[key] = 0;
+ }
+}
+
+int main ( int argc, char** argv ) // Create Main Function For Bringing It All Together
+{
+ glutInit ( &argc, argv ); // Erm Just Write It =)
+ glutInitDisplayMode ( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); // Display Mode
+ glutInitWindowSize ( WIDTH, HEIGHT ); // If glutFullScreen wasn't called this is the window size
+ glutCreateWindow ( "OpenGL" ); // Window Title (argv[0] for current directory as title)
+ if (FULLSCREEN) {
+ glutFullScreen ( ); // Put Into Full Screen
+ }
+ glutDisplayFunc ( draw ); // Matching Earlier Functions To Their Counterparts
+ glutIdleFunc ( draw );
+ glutReshapeFunc ( resize );
+ glutKeyboardFunc ( keyboardDown );
+ glutKeyboardUpFunc ( keyboardUp );
+ glutSpecialFunc ( specialKeyDown );
+ glutSpecialUpFunc ( specialKeyUp );
+ init ();
+ glutMainLoop ( ); // Initialize The Main Loop
+ return 0;
+}
+
+
+
+void DrawGrid(
+ float minX, float maxX,
+ float minY, float maxY,
+ float minZ, float maxZ,
+ float stepX, float stepY, float stepZ)
+{
+ float x,y,z;
+
+ glBegin(GL_LINES);
+
+ // X grid stripes
+ for (y=minY; y<maxY; y+=stepY) {
+ for (z=minZ; z<maxZ; z+=stepZ) {
+ glVertex3f(minX, y, z);
+ glVertex3f(maxX, y, z);
+ }
+ }
+
+ // Y grid stripes
+ for (x=minX; x<maxX; x+=stepX) {
+ for (z=minZ; z<maxZ; z+=stepZ) {
+ glVertex3f(x, minY, z);
+ glVertex3f(x, maxY, z);
+ }
+ }
+
+ // Z grid stripes
+ for (y=minY; y<maxY; y+=stepY) {
+ for (x=minX; x<maxX; x+=stepX) {
+ glVertex3f(x, y, minZ);
+ glVertex3f(x, y, maxZ);
+ }
+ }
+
+ glEnd();
+}
+
+
+void DrawCoordinateSystem(
+ float x, float y, float z,
+ float qx, float qy, float qz, float qr)
+{
+ FLT i0[3],j0[3],k0[3];
+ FLT i[3],j[3],k[3];
+ FLT q[4];
+
+ i0[0]=1.0; i0[1]=0.0; i0[2]=0.0;
+ j0[0]=0.0; j0[1]=1.0; j0[2]=0.0;
+ k0[0]=0.0; k0[1]=0.0; k0[2]=1.0;
+ q [0]=qr; q [1]=qx; q [2]=qy; q [3]=qz;
+
+ quatrotatevector(i, q, i0);
+ quatrotatevector(j, q, j0);
+ quatrotatevector(k, q, k0);
+
+ glBegin(GL_LINES);
+ glColor3f(1, 0, 0); glVertex3f(x,z,y); glVertex3f(x+i[0],z+i[2],y+i[1]);
+ glColor3f(0, 1, 0); glVertex3f(x,z,y); glVertex3f(x+j[0],z+j[2],y+j[1]);
+ glColor3f(0, 0, 1); glVertex3f(x,z,y); glVertex3f(x+k[0],z+k[2],y+k[1]);
+ glEnd();
+}
+
+
diff --git a/attic/dave/dclapack_test b/attic/dave/dclapack_test
new file mode 100755
index 0000000..bac05e7
--- /dev/null
+++ b/attic/dave/dclapack_test
Binary files differ
diff --git a/attic/dave/dclapack_test.c b/attic/dave/dclapack_test.c
new file mode 100644
index 0000000..3f48b08
--- /dev/null
+++ b/attic/dave/dclapack_test.c
@@ -0,0 +1,34 @@
+#define FLOAT float
+#define ORDER 50
+#include "../redist/dclapack.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main()
+{
+ float A[ORDER][ORDER];
+ float Ainv[ORDER][ORDER];
+ float Prod[ORDER][ORDER];
+
+ int i, j, n = 3;
+ srand(7779);
+
+ for(i=0; i<n; i++) {
+ for(j=0; j<n; j++) {
+ A[i][j] = (float)rand() / RAND_MAX;
+ }
+ }
+
+ for (i=0; i<10000; i++) {
+ INV(A,Ainv,n);
+ }
+
+ PRINT(A,n,n);
+ PRINT(Ainv,n,n);
+ MUL(A,Ainv,Prod,n,n,n);
+ PRINT(Prod,n,n);
+
+ return 0;
+}
+
diff --git a/attic/dave/errors.txt b/attic/dave/errors.txt
new file mode 100644
index 0000000..df2a094
--- /dev/null
+++ b/attic/dave/errors.txt
@@ -0,0 +1,2141 @@
+AffineSolve.c: In function ‘quattomatrix33’:
+AffineSolve.c:33:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+AffineSolve.c:50:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+AffineSolve.c:100:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+AffineSolve.c:362:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+AffineSolve.c:534:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+In file included from AffineSolve.c:12:0:
+../redist/linmath.h:106:6: error: old-style parameter declarations in prototyped function definition
+ void quattomatrix33(FLT * matrix33, const FLT * qin)
+ ^
+AffineSolve.c:658:1: error: expected ‘{’ at end of input
+ }
+ ^
+In file included from /usr/include/math.h:48:0,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathdef.h: In function ‘quattomatrix33’:
+/usr/include/x86_64-linux-gnu/bits/mathdef.h:28:15: error: storage class specified for parameter ‘float_t’
+ typedef float float_t; /* `float' expressions are evaluated as `float'. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathdef.h:29:16: error: storage class specified for parameter ‘double_t’
+ typedef double double_t; /* `double' expressions are evaluated
+ ^
+In file included from /usr/include/features.h:367:0,
+ from /usr/include/math.h:26,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:54:1: error: storage class specified for parameter ‘acos’
+ __MATHCALL (acos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:54:1: error: storage class specified for parameter ‘__acos’
+ __MATHCALL (acos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:56:1: error: storage class specified for parameter ‘asin’
+ __MATHCALL (asin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:56:1: error: storage class specified for parameter ‘__asin’
+ __MATHCALL (asin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:58:1: error: storage class specified for parameter ‘atan’
+ __MATHCALL (atan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:58:1: error: storage class specified for parameter ‘__atan’
+ __MATHCALL (atan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:60:1: error: storage class specified for parameter ‘atan2’
+ __MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:60:1: error: storage class specified for parameter ‘__atan2’
+ __MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:63:1: error: storage class specified for parameter ‘cos’
+ __MATHCALL_VEC (cos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:63:1: error: storage class specified for parameter ‘__cos’
+ __MATHCALL_VEC (cos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:65:1: error: storage class specified for parameter ‘sin’
+ __MATHCALL_VEC (sin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:65:1: error: storage class specified for parameter ‘__sin’
+ __MATHCALL_VEC (sin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:67:1: error: storage class specified for parameter ‘tan’
+ __MATHCALL (tan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:67:1: error: storage class specified for parameter ‘__tan’
+ __MATHCALL (tan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:72:1: error: storage class specified for parameter ‘cosh’
+ __MATHCALL (cosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:72:1: error: storage class specified for parameter ‘__cosh’
+ __MATHCALL (cosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:74:1: error: storage class specified for parameter ‘sinh’
+ __MATHCALL (sinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:74:1: error: storage class specified for parameter ‘__sinh’
+ __MATHCALL (sinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:76:1: error: storage class specified for parameter ‘tanh’
+ __MATHCALL (tanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:76:1: error: storage class specified for parameter ‘__tanh’
+ __MATHCALL (tanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:88:1: error: storage class specified for parameter ‘acosh’
+ __MATHCALL (acosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:88:1: error: storage class specified for parameter ‘__acosh’
+ __MATHCALL (acosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:90:1: error: storage class specified for parameter ‘asinh’
+ __MATHCALL (asinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:90:1: error: storage class specified for parameter ‘__asinh’
+ __MATHCALL (asinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:92:1: error: storage class specified for parameter ‘atanh’
+ __MATHCALL (atanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:92:1: error: storage class specified for parameter ‘__atanh’
+ __MATHCALL (atanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:100:1: error: storage class specified for parameter ‘exp’
+ __MATHCALL_VEC (exp,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:100:1: error: storage class specified for parameter ‘__exp’
+ __MATHCALL_VEC (exp,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:103:1: error: storage class specified for parameter ‘frexp’
+ __MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:103:1: error: storage class specified for parameter ‘__frexp’
+ __MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:106:1: error: storage class specified for parameter ‘ldexp’
+ __MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:106:1: error: storage class specified for parameter ‘__ldexp’
+ __MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:109:1: error: storage class specified for parameter ‘log’
+ __MATHCALL_VEC (log,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:109:1: error: storage class specified for parameter ‘__log’
+ __MATHCALL_VEC (log,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:112:1: error: storage class specified for parameter ‘log10’
+ __MATHCALL (log10,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:112:1: error: storage class specified for parameter ‘__log10’
+ __MATHCALL (log10,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:115:1: error: storage class specified for parameter ‘modf’
+ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:115:1: error: storage class specified for parameter ‘__modf’
+ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:128:1: error: storage class specified for parameter ‘expm1’
+ __MATHCALL (expm1,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:128:1: error: storage class specified for parameter ‘__expm1’
+ __MATHCALL (expm1,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:131:1: error: storage class specified for parameter ‘log1p’
+ __MATHCALL (log1p,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:131:1: error: storage class specified for parameter ‘__log1p’
+ __MATHCALL (log1p,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:134:1: error: storage class specified for parameter ‘logb’
+ __MATHCALL (logb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:134:1: error: storage class specified for parameter ‘__logb’
+ __MATHCALL (logb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:141:1: error: storage class specified for parameter ‘exp2’
+ __MATHCALL (exp2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:141:1: error: storage class specified for parameter ‘__exp2’
+ __MATHCALL (exp2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:144:1: error: storage class specified for parameter ‘log2’
+ __MATHCALL (log2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:144:1: error: storage class specified for parameter ‘__log2’
+ __MATHCALL (log2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:153:1: error: storage class specified for parameter ‘pow’
+ __MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:153:1: error: storage class specified for parameter ‘__pow’
+ __MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:156:1: error: storage class specified for parameter ‘sqrt’
+ __MATHCALL (sqrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:156:1: error: storage class specified for parameter ‘__sqrt’
+ __MATHCALL (sqrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:162:1: error: storage class specified for parameter ‘hypot’
+ __MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:162:1: error: storage class specified for parameter ‘__hypot’
+ __MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:169:1: error: storage class specified for parameter ‘cbrt’
+ __MATHCALL (cbrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:169:1: error: storage class specified for parameter ‘__cbrt’
+ __MATHCALL (cbrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:178:1: error: storage class specified for parameter ‘ceil’
+ __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:178:1: error: storage class specified for parameter ‘__ceil’
+ __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:181:1: error: storage class specified for parameter ‘fabs’
+ __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:181:1: error: storage class specified for parameter ‘__fabs’
+ __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:184:1: error: storage class specified for parameter ‘floor’
+ __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:184:1: error: storage class specified for parameter ‘__floor’
+ __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: error: storage class specified for parameter ‘fmod’
+ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: error: storage class specified for parameter ‘__fmod’
+ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:192:1: error: storage class specified for parameter ‘__isinf’
+ __MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:195:1: error: storage class specified for parameter ‘__finite’
+ __MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:204:1: error: storage class specified for parameter ‘isinf’
+ __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:208:1: error: storage class specified for parameter ‘finite’
+ __MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:211:1: error: storage class specified for parameter ‘drem’
+ __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:211:1: error: storage class specified for parameter ‘__drem’
+ __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:215:1: error: storage class specified for parameter ‘significand’
+ __MATHCALL (significand,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:215:1: error: storage class specified for parameter ‘__significand’
+ __MATHCALL (significand,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: error: storage class specified for parameter ‘copysign’
+ __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: error: storage class specified for parameter ‘__copysign’
+ __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:228:1: error: storage class specified for parameter ‘nan’
+ __MATHCALLX (nan,, (const char *__tagb), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:228:1: error: storage class specified for parameter ‘__nan’
+ __MATHCALLX (nan,, (const char *__tagb), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:234:1: error: storage class specified for parameter ‘__isnan’
+ __MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:241:1: error: storage class specified for parameter ‘isnan’
+ __MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:247:1: error: storage class specified for parameter ‘j0’
+ __MATHCALL (j0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:247:1: error: storage class specified for parameter ‘__j0’
+ __MATHCALL (j0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:248:1: error: storage class specified for parameter ‘j1’
+ __MATHCALL (j1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:248:1: error: storage class specified for parameter ‘__j1’
+ __MATHCALL (j1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:249:1: error: storage class specified for parameter ‘jn’
+ __MATHCALL (jn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:249:1: error: storage class specified for parameter ‘__jn’
+ __MATHCALL (jn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:250:1: error: storage class specified for parameter ‘y0’
+ __MATHCALL (y0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:250:1: error: storage class specified for parameter ‘__y0’
+ __MATHCALL (y0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:251:1: error: storage class specified for parameter ‘y1’
+ __MATHCALL (y1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:251:1: error: storage class specified for parameter ‘__y1’
+ __MATHCALL (y1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:252:1: error: storage class specified for parameter ‘yn’
+ __MATHCALL (yn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:252:1: error: storage class specified for parameter ‘__yn’
+ __MATHCALL (yn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:259:1: error: storage class specified for parameter ‘erf’
+ __MATHCALL (erf,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:259:1: error: storage class specified for parameter ‘__erf’
+ __MATHCALL (erf,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:260:1: error: storage class specified for parameter ‘erfc’
+ __MATHCALL (erfc,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:260:1: error: storage class specified for parameter ‘__erfc’
+ __MATHCALL (erfc,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:261:1: error: storage class specified for parameter ‘lgamma’
+ __MATHCALL (lgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:261:1: error: storage class specified for parameter ‘__lgamma’
+ __MATHCALL (lgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:268:1: error: storage class specified for parameter ‘tgamma’
+ __MATHCALL (tgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:268:1: error: storage class specified for parameter ‘__tgamma’
+ __MATHCALL (tgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:274:1: error: storage class specified for parameter ‘gamma’
+ __MATHCALL (gamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:274:1: error: storage class specified for parameter ‘__gamma’
+ __MATHCALL (gamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:281:1: error: storage class specified for parameter ‘lgamma_r’
+ __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:281:1: error: storage class specified for parameter ‘__lgamma_r’
+ __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:289:1: error: storage class specified for parameter ‘rint’
+ __MATHCALL (rint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:289:1: error: storage class specified for parameter ‘__rint’
+ __MATHCALL (rint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:292:1: error: storage class specified for parameter ‘nextafter’
+ __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:292:1: error: storage class specified for parameter ‘__nextafter’
+ __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:294:1: error: storage class specified for parameter ‘nexttoward’
+ __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:294:1: error: storage class specified for parameter ‘__nexttoward’
+ __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:298:1: error: storage class specified for parameter ‘remainder’
+ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:298:1: error: storage class specified for parameter ‘__remainder’
+ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:302:1: error: storage class specified for parameter ‘scalbn’
+ __MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:302:1: error: storage class specified for parameter ‘__scalbn’
+ __MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:306:1: error: storage class specified for parameter ‘ilogb’
+ __MATHDECL (int,ilogb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:306:1: error: storage class specified for parameter ‘__ilogb’
+ __MATHDECL (int,ilogb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:311:1: error: storage class specified for parameter ‘scalbln’
+ __MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:311:1: error: storage class specified for parameter ‘__scalbln’
+ __MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:315:1: error: storage class specified for parameter ‘nearbyint’
+ __MATHCALL (nearbyint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:315:1: error: storage class specified for parameter ‘__nearbyint’
+ __MATHCALL (nearbyint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:319:1: error: storage class specified for parameter ‘round’
+ __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:319:1: error: storage class specified for parameter ‘__round’
+ __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:323:1: error: storage class specified for parameter ‘trunc’
+ __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:323:1: error: storage class specified for parameter ‘__trunc’
+ __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:328:1: error: storage class specified for parameter ‘remquo’
+ __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:328:1: error: storage class specified for parameter ‘__remquo’
+ __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:335:1: error: storage class specified for parameter ‘lrint’
+ __MATHDECL (long int,lrint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:335:1: error: storage class specified for parameter ‘__lrint’
+ __MATHDECL (long int,lrint,, (_Mdouble_ __x));
+ ^
+In file included from /usr/include/math.h:83:0,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:336:1: error: expected declaration specifiers before ‘__extension__’
+ __extension__
+ ^
+In file included from /usr/include/features.h:367:0,
+ from /usr/include/math.h:26,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:337:1: error: storage class specified for parameter ‘__llrint’
+ __MATHDECL (long long int,llrint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:341:1: error: storage class specified for parameter ‘lround’
+ __MATHDECL (long int,lround,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:341:1: error: storage class specified for parameter ‘__lround’
+ __MATHDECL (long int,lround,, (_Mdouble_ __x));
+ ^
+In file included from /usr/include/math.h:83:0,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:342:1: error: expected declaration specifiers before ‘__extension__’
+ __extension__
+ ^
+In file included from /usr/include/features.h:367:0,
+ from /usr/include/math.h:26,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:343:1: error: storage class specified for parameter ‘__llround’
+ __MATHDECL (long long int,llround,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:347:1: error: storage class specified for parameter ‘fdim’
+ __MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:347:1: error: storage class specified for parameter ‘__fdim’
+ __MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:350:1: error: storage class specified for parameter ‘fmax’
+ __MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:350:1: error: storage class specified for parameter ‘__fmax’
+ __MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:353:1: error: storage class specified for parameter ‘fmin’
+ __MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:353:1: error: storage class specified for parameter ‘__fmin’
+ __MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:357:1: error: storage class specified for parameter ‘__fpclassify’
+ __MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:361:1: error: storage class specified for parameter ‘__signbit’
+ __MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:366:1: error: storage class specified for parameter ‘fma’
+ __MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:366:1: error: storage class specified for parameter ‘__fma’
+ __MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:383:1: error: storage class specified for parameter ‘scalb’
+ __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:383:1: error: storage class specified for parameter ‘__scalb’
+ __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+ ^
+In file included from ../redist/linmath.c:4:0:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:54:1: error: storage class specified for parameter ‘acosf’
+ __MATHCALL (acos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:54:1: error: storage class specified for parameter ‘__acosf’
+ __MATHCALL (acos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:56:1: error: storage class specified for parameter ‘asinf’
+ __MATHCALL (asin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:56:1: error: storage class specified for parameter ‘__asinf’
+ __MATHCALL (asin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:58:1: error: storage class specified for parameter ‘atanf’
+ __MATHCALL (atan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:58:1: error: storage class specified for parameter ‘__atanf’
+ __MATHCALL (atan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:60:1: error: storage class specified for parameter ‘atan2f’
+ __MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:60:1: error: storage class specified for parameter ‘__atan2f’
+ __MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:63:1: error: storage class specified for parameter ‘cosf’
+ __MATHCALL_VEC (cos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:63:1: error: storage class specified for parameter ‘__cosf’
+ __MATHCALL_VEC (cos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:65:1: error: storage class specified for parameter ‘sinf’
+ __MATHCALL_VEC (sin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:65:1: error: storage class specified for parameter ‘__sinf’
+ __MATHCALL_VEC (sin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:67:1: error: storage class specified for parameter ‘tanf’
+ __MATHCALL (tan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:67:1: error: storage class specified for parameter ‘__tanf’
+ __MATHCALL (tan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:72:1: error: storage class specified for parameter ‘coshf’
+ __MATHCALL (cosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:72:1: error: storage class specified for parameter ‘__coshf’
+ __MATHCALL (cosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:74:1: error: storage class specified for parameter ‘sinhf’
+ __MATHCALL (sinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:74:1: error: storage class specified for parameter ‘__sinhf’
+ __MATHCALL (sinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:76:1: error: storage class specified for parameter ‘tanhf’
+ __MATHCALL (tanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:76:1: error: storage class specified for parameter ‘__tanhf’
+ __MATHCALL (tanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:88:1: error: storage class specified for parameter ‘acoshf’
+ __MATHCALL (acosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:88:1: error: storage class specified for parameter ‘__acoshf’
+ __MATHCALL (acosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:90:1: error: storage class specified for parameter ‘asinhf’
+ __MATHCALL (asinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:90:1: error: storage class specified for parameter ‘__asinhf’
+ __MATHCALL (asinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:92:1: error: storage class specified for parameter ‘atanhf’
+ __MATHCALL (atanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:92:1: error: storage class specified for parameter ‘__atanhf’
+ __MATHCALL (atanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:100:1: error: storage class specified for parameter ‘expf’
+ __MATHCALL_VEC (exp,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:100:1: error: storage class specified for parameter ‘__expf’
+ __MATHCALL_VEC (exp,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:103:1: error: storage class specified for parameter ‘frexpf’
+ __MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:103:1: error: storage class specified for parameter ‘__frexpf’
+ __MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:106:1: error: storage class specified for parameter ‘ldexpf’
+ __MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:106:1: error: storage class specified for parameter ‘__ldexpf’
+ __MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:109:1: error: storage class specified for parameter ‘logf’
+ __MATHCALL_VEC (log,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:109:1: error: storage class specified for parameter ‘__logf’
+ __MATHCALL_VEC (log,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:112:1: error: storage class specified for parameter ‘log10f’
+ __MATHCALL (log10,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:112:1: error: storage class specified for parameter ‘__log10f’
+ __MATHCALL (log10,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:115:1: error: storage class specified for parameter ‘modff’
+ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:115:1: error: storage class specified for parameter ‘__modff’
+ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:128:1: error: storage class specified for parameter ‘expm1f’
+ __MATHCALL (expm1,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:128:1: error: storage class specified for parameter ‘__expm1f’
+ __MATHCALL (expm1,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:131:1: error: storage class specified for parameter ‘log1pf’
+ __MATHCALL (log1p,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:131:1: error: storage class specified for parameter ‘__log1pf’
+ __MATHCALL (log1p,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:134:1: error: storage class specified for parameter ‘logbf’
+ __MATHCALL (logb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:134:1: error: storage class specified for parameter ‘__logbf’
+ __MATHCALL (logb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:141:1: error: storage class specified for parameter ‘exp2f’
+ __MATHCALL (exp2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:141:1: error: storage class specified for parameter ‘__exp2f’
+ __MATHCALL (exp2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:144:1: error: storage class specified for parameter ‘log2f’
+ __MATHCALL (log2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:144:1: error: storage class specified for parameter ‘__log2f’
+ __MATHCALL (log2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:153:1: error: storage class specified for parameter ‘powf’
+ __MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:153:1: error: storage class specified for parameter ‘__powf’
+ __MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:156:1: error: storage class specified for parameter ‘sqrtf’
+ __MATHCALL (sqrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:156:1: error: storage class specified for parameter ‘__sqrtf’
+ __MATHCALL (sqrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:162:1: error: storage class specified for parameter ‘hypotf’
+ __MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:162:1: error: storage class specified for parameter ‘__hypotf’
+ __MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:169:1: error: storage class specified for parameter ‘cbrtf’
+ __MATHCALL (cbrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:169:1: error: storage class specified for parameter ‘__cbrtf’
+ __MATHCALL (cbrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:178:1: error: storage class specified for parameter ‘ceilf’
+ __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:178:1: error: storage class specified for parameter ‘__ceilf’
+ __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:181:1: error: storage class specified for parameter ‘fabsf’
+ __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:181:1: error: storage class specified for parameter ‘__fabsf’
+ __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:184:1: error: storage class specified for parameter ‘floorf’
+ __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:184:1: error: storage class specified for parameter ‘__floorf’
+ __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: error: storage class specified for parameter ‘fmodf’
+ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: error: storage class specified for parameter ‘__fmodf’
+ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:192:1: error: storage class specified for parameter ‘__isinff’
+ __MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:195:1: error: storage class specified for parameter ‘__finitef’
+ __MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:204:1: error: storage class specified for parameter ‘isinff’
+ __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:208:1: error: storage class specified for parameter ‘finitef’
+ __MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:211:1: error: storage class specified for parameter ‘dremf’
+ __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:211:1: error: storage class specified for parameter ‘__dremf’
+ __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:215:1: error: storage class specified for parameter ‘significandf’
+ __MATHCALL (significand,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:215:1: error: storage class specified for parameter ‘__significandf’
+ __MATHCALL (significand,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: error: storage class specified for parameter ‘copysignf’
+ __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: error: storage class specified for parameter ‘__copysignf’
+ __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:228:1: error: storage class specified for parameter ‘nanf’
+ __MATHCALLX (nan,, (const char *__tagb), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:228:1: error: storage class specified for parameter ‘__nanf’
+ __MATHCALLX (nan,, (const char *__tagb), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:234:1: error: storage class specified for parameter ‘__isnanf’
+ __MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:241:1: error: storage class specified for parameter ‘isnanf’
+ __MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:247:1: error: storage class specified for parameter ‘j0f’
+ __MATHCALL (j0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:247:1: error: storage class specified for parameter ‘__j0f’
+ __MATHCALL (j0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:248:1: error: storage class specified for parameter ‘j1f’
+ __MATHCALL (j1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:248:1: error: storage class specified for parameter ‘__j1f’
+ __MATHCALL (j1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:249:1: error: storage class specified for parameter ‘jnf’
+ __MATHCALL (jn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:249:1: error: storage class specified for parameter ‘__jnf’
+ __MATHCALL (jn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:250:1: error: storage class specified for parameter ‘y0f’
+ __MATHCALL (y0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:250:1: error: storage class specified for parameter ‘__y0f’
+ __MATHCALL (y0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:251:1: error: storage class specified for parameter ‘y1f’
+ __MATHCALL (y1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:251:1: error: storage class specified for parameter ‘__y1f’
+ __MATHCALL (y1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:252:1: error: storage class specified for parameter ‘ynf’
+ __MATHCALL (yn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:252:1: error: storage class specified for parameter ‘__ynf’
+ __MATHCALL (yn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:259:1: error: storage class specified for parameter ‘erff’
+ __MATHCALL (erf,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:259:1: error: storage class specified for parameter ‘__erff’
+ __MATHCALL (erf,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:260:1: error: storage class specified for parameter ‘erfcf’
+ __MATHCALL (erfc,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:260:1: error: storage class specified for parameter ‘__erfcf’
+ __MATHCALL (erfc,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:261:1: error: storage class specified for parameter ‘lgammaf’
+ __MATHCALL (lgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:261:1: error: storage class specified for parameter ‘__lgammaf’
+ __MATHCALL (lgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:268:1: error: storage class specified for parameter ‘tgammaf’
+ __MATHCALL (tgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:268:1: error: storage class specified for parameter ‘__tgammaf’
+ __MATHCALL (tgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:274:1: error: storage class specified for parameter ‘gammaf’
+ __MATHCALL (gamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:274:1: error: storage class specified for parameter ‘__gammaf’
+ __MATHCALL (gamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:281:1: error: storage class specified for parameter ‘lgammaf_r’
+ __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:281:1: error: storage class specified for parameter ‘__lgammaf_r’
+ __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:289:1: error: storage class specified for parameter ‘rintf’
+ __MATHCALL (rint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:289:1: error: storage class specified for parameter ‘__rintf’
+ __MATHCALL (rint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:292:1: error: storage class specified for parameter ‘nextafterf’
+ __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:292:1: error: storage class specified for parameter ‘__nextafterf’
+ __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:294:1: error: storage class specified for parameter ‘nexttowardf’
+ __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:294:1: error: storage class specified for parameter ‘__nexttowardf’
+ __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:298:1: error: storage class specified for parameter ‘remainderf’
+ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:298:1: error: storage class specified for parameter ‘__remainderf’
+ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:302:1: error: storage class specified for parameter ‘scalbnf’
+ __MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:302:1: error: storage class specified for parameter ‘__scalbnf’
+ __MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:306:1: error: storage class specified for parameter ‘ilogbf’
+ __MATHDECL (int,ilogb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:306:1: error: storage class specified for parameter ‘__ilogbf’
+ __MATHDECL (int,ilogb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:311:1: error: storage class specified for parameter ‘scalblnf’
+ __MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:311:1: error: storage class specified for parameter ‘__scalblnf’
+ __MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:315:1: error: storage class specified for parameter ‘nearbyintf’
+ __MATHCALL (nearbyint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:315:1: error: storage class specified for parameter ‘__nearbyintf’
+ __MATHCALL (nearbyint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:319:1: error: storage class specified for parameter ‘roundf’
+ __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:319:1: error: storage class specified for parameter ‘__roundf’
+ __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:323:1: error: storage class specified for parameter ‘truncf’
+ __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:323:1: error: storage class specified for parameter ‘__truncf’
+ __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:328:1: error: storage class specified for parameter ‘remquof’
+ __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:328:1: error: storage class specified for parameter ‘__remquof’
+ __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:335:1: error: storage class specified for parameter ‘lrintf’
+ __MATHDECL (long int,lrint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:335:1: error: storage class specified for parameter ‘__lrintf’
+ __MATHDECL (long int,lrint,, (_Mdouble_ __x));
+ ^
+In file included from /usr/include/math.h:104:0,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:336:1: error: expected declaration specifiers before ‘__extension__’
+ __extension__
+ ^
+In file included from ../redist/linmath.c:4:0:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:337:1: error: storage class specified for parameter ‘__llrintf’
+ __MATHDECL (long long int,llrint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:341:1: error: storage class specified for parameter ‘lroundf’
+ __MATHDECL (long int,lround,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:341:1: error: storage class specified for parameter ‘__lroundf’
+ __MATHDECL (long int,lround,, (_Mdouble_ __x));
+ ^
+In file included from /usr/include/math.h:104:0,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:342:1: error: expected declaration specifiers before ‘__extension__’
+ __extension__
+ ^
+In file included from ../redist/linmath.c:4:0:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:343:1: error: storage class specified for parameter ‘__llroundf’
+ __MATHDECL (long long int,llround,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:347:1: error: storage class specified for parameter ‘fdimf’
+ __MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:347:1: error: storage class specified for parameter ‘__fdimf’
+ __MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:350:1: error: storage class specified for parameter ‘fmaxf’
+ __MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:350:1: error: storage class specified for parameter ‘__fmaxf’
+ __MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:353:1: error: storage class specified for parameter ‘fminf’
+ __MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:353:1: error: storage class specified for parameter ‘__fminf’
+ __MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:357:1: error: storage class specified for parameter ‘__fpclassifyf’
+ __MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:361:1: error: storage class specified for parameter ‘__signbitf’
+ __MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:366:1: error: storage class specified for parameter ‘fmaf’
+ __MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:366:1: error: storage class specified for parameter ‘__fmaf’
+ __MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:383:1: error: storage class specified for parameter ‘scalbf’
+ __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:383:1: error: storage class specified for parameter ‘__scalbf’
+ __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+ ^
+In file included from ../redist/linmath.c:4:0:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:54:1: error: storage class specified for parameter ‘acosl’
+ __MATHCALL (acos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:54:1: error: storage class specified for parameter ‘__acosl’
+ __MATHCALL (acos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:56:1: error: storage class specified for parameter ‘asinl’
+ __MATHCALL (asin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:56:1: error: storage class specified for parameter ‘__asinl’
+ __MATHCALL (asin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:58:1: error: storage class specified for parameter ‘atanl’
+ __MATHCALL (atan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:58:1: error: storage class specified for parameter ‘__atanl’
+ __MATHCALL (atan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:60:1: error: storage class specified for parameter ‘atan2l’
+ __MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:60:1: error: storage class specified for parameter ‘__atan2l’
+ __MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:63:1: error: storage class specified for parameter ‘cosl’
+ __MATHCALL_VEC (cos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:63:1: error: storage class specified for parameter ‘__cosl’
+ __MATHCALL_VEC (cos,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:65:1: error: storage class specified for parameter ‘sinl’
+ __MATHCALL_VEC (sin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:65:1: error: storage class specified for parameter ‘__sinl’
+ __MATHCALL_VEC (sin,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:67:1: error: storage class specified for parameter ‘tanl’
+ __MATHCALL (tan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:67:1: error: storage class specified for parameter ‘__tanl’
+ __MATHCALL (tan,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:72:1: error: storage class specified for parameter ‘coshl’
+ __MATHCALL (cosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:72:1: error: storage class specified for parameter ‘__coshl’
+ __MATHCALL (cosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:74:1: error: storage class specified for parameter ‘sinhl’
+ __MATHCALL (sinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:74:1: error: storage class specified for parameter ‘__sinhl’
+ __MATHCALL (sinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:76:1: error: storage class specified for parameter ‘tanhl’
+ __MATHCALL (tanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:76:1: error: storage class specified for parameter ‘__tanhl’
+ __MATHCALL (tanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:88:1: error: storage class specified for parameter ‘acoshl’
+ __MATHCALL (acosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:88:1: error: storage class specified for parameter ‘__acoshl’
+ __MATHCALL (acosh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:90:1: error: storage class specified for parameter ‘asinhl’
+ __MATHCALL (asinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:90:1: error: storage class specified for parameter ‘__asinhl’
+ __MATHCALL (asinh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:92:1: error: storage class specified for parameter ‘atanhl’
+ __MATHCALL (atanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:92:1: error: storage class specified for parameter ‘__atanhl’
+ __MATHCALL (atanh,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:100:1: error: storage class specified for parameter ‘expl’
+ __MATHCALL_VEC (exp,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:100:1: error: storage class specified for parameter ‘__expl’
+ __MATHCALL_VEC (exp,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:103:1: error: storage class specified for parameter ‘frexpl’
+ __MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:103:1: error: storage class specified for parameter ‘__frexpl’
+ __MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:106:1: error: storage class specified for parameter ‘ldexpl’
+ __MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:106:1: error: storage class specified for parameter ‘__ldexpl’
+ __MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:109:1: error: storage class specified for parameter ‘logl’
+ __MATHCALL_VEC (log,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:109:1: error: storage class specified for parameter ‘__logl’
+ __MATHCALL_VEC (log,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:112:1: error: storage class specified for parameter ‘log10l’
+ __MATHCALL (log10,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:112:1: error: storage class specified for parameter ‘__log10l’
+ __MATHCALL (log10,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:115:1: error: storage class specified for parameter ‘modfl’
+ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:115:1: error: storage class specified for parameter ‘__modfl’
+ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:128:1: error: storage class specified for parameter ‘expm1l’
+ __MATHCALL (expm1,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:128:1: error: storage class specified for parameter ‘__expm1l’
+ __MATHCALL (expm1,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:131:1: error: storage class specified for parameter ‘log1pl’
+ __MATHCALL (log1p,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:131:1: error: storage class specified for parameter ‘__log1pl’
+ __MATHCALL (log1p,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:134:1: error: storage class specified for parameter ‘logbl’
+ __MATHCALL (logb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:134:1: error: storage class specified for parameter ‘__logbl’
+ __MATHCALL (logb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:141:1: error: storage class specified for parameter ‘exp2l’
+ __MATHCALL (exp2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:141:1: error: storage class specified for parameter ‘__exp2l’
+ __MATHCALL (exp2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:144:1: error: storage class specified for parameter ‘log2l’
+ __MATHCALL (log2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:144:1: error: storage class specified for parameter ‘__log2l’
+ __MATHCALL (log2,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:153:1: error: storage class specified for parameter ‘powl’
+ __MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:153:1: error: storage class specified for parameter ‘__powl’
+ __MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:156:1: error: storage class specified for parameter ‘sqrtl’
+ __MATHCALL (sqrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:156:1: error: storage class specified for parameter ‘__sqrtl’
+ __MATHCALL (sqrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:162:1: error: storage class specified for parameter ‘hypotl’
+ __MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:162:1: error: storage class specified for parameter ‘__hypotl’
+ __MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:169:1: error: storage class specified for parameter ‘cbrtl’
+ __MATHCALL (cbrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:169:1: error: storage class specified for parameter ‘__cbrtl’
+ __MATHCALL (cbrt,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:178:1: error: storage class specified for parameter ‘ceill’
+ __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:178:1: error: storage class specified for parameter ‘__ceill’
+ __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:181:1: error: storage class specified for parameter ‘fabsl’
+ __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:181:1: error: storage class specified for parameter ‘__fabsl’
+ __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:184:1: error: storage class specified for parameter ‘floorl’
+ __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:184:1: error: storage class specified for parameter ‘__floorl’
+ __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: error: storage class specified for parameter ‘fmodl’
+ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:187:1: error: storage class specified for parameter ‘__fmodl’
+ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:192:1: error: storage class specified for parameter ‘__isinfl’
+ __MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:195:1: error: storage class specified for parameter ‘__finitel’
+ __MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:204:1: error: storage class specified for parameter ‘isinfl’
+ __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:208:1: error: storage class specified for parameter ‘finitel’
+ __MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:211:1: error: storage class specified for parameter ‘dreml’
+ __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:211:1: error: storage class specified for parameter ‘__dreml’
+ __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:215:1: error: storage class specified for parameter ‘significandl’
+ __MATHCALL (significand,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:215:1: error: storage class specified for parameter ‘__significandl’
+ __MATHCALL (significand,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: error: storage class specified for parameter ‘copysignl’
+ __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: error: storage class specified for parameter ‘__copysignl’
+ __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:228:1: error: storage class specified for parameter ‘nanl’
+ __MATHCALLX (nan,, (const char *__tagb), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:228:1: error: storage class specified for parameter ‘__nanl’
+ __MATHCALLX (nan,, (const char *__tagb), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:234:1: error: storage class specified for parameter ‘__isnanl’
+ __MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:241:1: error: storage class specified for parameter ‘isnanl’
+ __MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:247:1: error: storage class specified for parameter ‘j0l’
+ __MATHCALL (j0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:247:1: error: storage class specified for parameter ‘__j0l’
+ __MATHCALL (j0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:248:1: error: storage class specified for parameter ‘j1l’
+ __MATHCALL (j1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:248:1: error: storage class specified for parameter ‘__j1l’
+ __MATHCALL (j1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:249:1: error: storage class specified for parameter ‘jnl’
+ __MATHCALL (jn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:249:1: error: storage class specified for parameter ‘__jnl’
+ __MATHCALL (jn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:250:1: error: storage class specified for parameter ‘y0l’
+ __MATHCALL (y0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:250:1: error: storage class specified for parameter ‘__y0l’
+ __MATHCALL (y0,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:251:1: error: storage class specified for parameter ‘y1l’
+ __MATHCALL (y1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:251:1: error: storage class specified for parameter ‘__y1l’
+ __MATHCALL (y1,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:252:1: error: storage class specified for parameter ‘ynl’
+ __MATHCALL (yn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:252:1: error: storage class specified for parameter ‘__ynl’
+ __MATHCALL (yn,, (int, _Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:259:1: error: storage class specified for parameter ‘erfl’
+ __MATHCALL (erf,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:259:1: error: storage class specified for parameter ‘__erfl’
+ __MATHCALL (erf,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:260:1: error: storage class specified for parameter ‘erfcl’
+ __MATHCALL (erfc,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:260:1: error: storage class specified for parameter ‘__erfcl’
+ __MATHCALL (erfc,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:261:1: error: storage class specified for parameter ‘lgammal’
+ __MATHCALL (lgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:261:1: error: storage class specified for parameter ‘__lgammal’
+ __MATHCALL (lgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:268:1: error: storage class specified for parameter ‘tgammal’
+ __MATHCALL (tgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:268:1: error: storage class specified for parameter ‘__tgammal’
+ __MATHCALL (tgamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:274:1: error: storage class specified for parameter ‘gammal’
+ __MATHCALL (gamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:274:1: error: storage class specified for parameter ‘__gammal’
+ __MATHCALL (gamma,, (_Mdouble_));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:281:1: error: storage class specified for parameter ‘lgammal_r’
+ __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:281:1: error: storage class specified for parameter ‘__lgammal_r’
+ __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:289:1: error: storage class specified for parameter ‘rintl’
+ __MATHCALL (rint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:289:1: error: storage class specified for parameter ‘__rintl’
+ __MATHCALL (rint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:292:1: error: storage class specified for parameter ‘nextafterl’
+ __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:292:1: error: storage class specified for parameter ‘__nextafterl’
+ __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:294:1: error: storage class specified for parameter ‘nexttowardl’
+ __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:294:1: error: storage class specified for parameter ‘__nexttowardl’
+ __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:298:1: error: storage class specified for parameter ‘remainderl’
+ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:298:1: error: storage class specified for parameter ‘__remainderl’
+ __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:302:1: error: storage class specified for parameter ‘scalbnl’
+ __MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:302:1: error: storage class specified for parameter ‘__scalbnl’
+ __MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:306:1: error: storage class specified for parameter ‘ilogbl’
+ __MATHDECL (int,ilogb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:306:1: error: storage class specified for parameter ‘__ilogbl’
+ __MATHDECL (int,ilogb,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:311:1: error: storage class specified for parameter ‘scalblnl’
+ __MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:311:1: error: storage class specified for parameter ‘__scalblnl’
+ __MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:315:1: error: storage class specified for parameter ‘nearbyintl’
+ __MATHCALL (nearbyint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:315:1: error: storage class specified for parameter ‘__nearbyintl’
+ __MATHCALL (nearbyint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:319:1: error: storage class specified for parameter ‘roundl’
+ __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:319:1: error: storage class specified for parameter ‘__roundl’
+ __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:323:1: error: storage class specified for parameter ‘truncl’
+ __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:323:1: error: storage class specified for parameter ‘__truncl’
+ __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:328:1: error: storage class specified for parameter ‘remquol’
+ __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:328:1: error: storage class specified for parameter ‘__remquol’
+ __MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:335:1: error: storage class specified for parameter ‘lrintl’
+ __MATHDECL (long int,lrint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:335:1: error: storage class specified for parameter ‘__lrintl’
+ __MATHDECL (long int,lrint,, (_Mdouble_ __x));
+ ^
+In file included from /usr/include/math.h:151:0,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:336:1: error: expected declaration specifiers before ‘__extension__’
+ __extension__
+ ^
+In file included from ../redist/linmath.c:4:0:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:337:1: error: storage class specified for parameter ‘__llrintl’
+ __MATHDECL (long long int,llrint,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:341:1: error: storage class specified for parameter ‘lroundl’
+ __MATHDECL (long int,lround,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:341:1: error: storage class specified for parameter ‘__lroundl’
+ __MATHDECL (long int,lround,, (_Mdouble_ __x));
+ ^
+In file included from /usr/include/math.h:151:0,
+ from ../redist/linmath.c:4:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:342:1: error: expected declaration specifiers before ‘__extension__’
+ __extension__
+ ^
+In file included from ../redist/linmath.c:4:0:
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:343:1: error: storage class specified for parameter ‘__llroundl’
+ __MATHDECL (long long int,llround,, (_Mdouble_ __x));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:347:1: error: storage class specified for parameter ‘fdiml’
+ __MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:347:1: error: storage class specified for parameter ‘__fdiml’
+ __MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:350:1: error: storage class specified for parameter ‘fmaxl’
+ __MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:350:1: error: storage class specified for parameter ‘__fmaxl’
+ __MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:353:1: error: storage class specified for parameter ‘fminl’
+ __MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:353:1: error: storage class specified for parameter ‘__fminl’
+ __MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:357:1: error: storage class specified for parameter ‘__fpclassifyl’
+ __MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:361:1: error: storage class specified for parameter ‘__signbitl’
+ __MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:366:1: error: storage class specified for parameter ‘fmal’
+ __MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:366:1: error: storage class specified for parameter ‘__fmal’
+ __MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:383:1: error: storage class specified for parameter ‘scalbl’
+ __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+ ^
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:383:1: error: storage class specified for parameter ‘__scalbl’
+ __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+ ^
+In file included from ../redist/linmath.c:4:0:
+/usr/include/math.h:168:12: error: storage class specified for parameter ‘signgam’
+ extern int signgam;
+ ^
+/usr/include/math.h:354:3: error: storage class specified for parameter ‘_LIB_VERSION_TYPE’
+ } _LIB_VERSION_TYPE;
+ ^
+/usr/include/math.h:359:26: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_LIB_VERSION’
+ extern _LIB_VERSION_TYPE _LIB_VERSION;
+ ^
+/usr/include/math.h:385:12: error: storage class specified for parameter ‘matherr’
+ extern int matherr (struct exception *__exc);
+ ^
+In file included from /usr/include/stdio.h:33:0,
+ from ../redist/linmath.c:6:
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:216:23: error: storage class specified for parameter ‘size_t’
+ typedef __SIZE_TYPE__ size_t;
+ ^
+In file included from /usr/include/stdio.h:35:0,
+ from ../redist/linmath.c:6:
+/usr/include/x86_64-linux-gnu/bits/types.h:30:23: error: storage class specified for parameter ‘__u_char’
+ typedef unsigned char __u_char;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:31:28: error: storage class specified for parameter ‘__u_short’
+ typedef unsigned short int __u_short;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:32:22: error: storage class specified for parameter ‘__u_int’
+ typedef unsigned int __u_int;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:33:27: error: storage class specified for parameter ‘__u_long’
+ typedef unsigned long int __u_long;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:36:21: error: storage class specified for parameter ‘__int8_t’
+ typedef signed char __int8_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:37:23: error: storage class specified for parameter ‘__uint8_t’
+ typedef unsigned char __uint8_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:38:26: error: storage class specified for parameter ‘__int16_t’
+ typedef signed short int __int16_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:39:28: error: storage class specified for parameter ‘__uint16_t’
+ typedef unsigned short int __uint16_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:40:20: error: storage class specified for parameter ‘__int32_t’
+ typedef signed int __int32_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:41:22: error: storage class specified for parameter ‘__uint32_t’
+ typedef unsigned int __uint32_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:43:25: error: storage class specified for parameter ‘__int64_t’
+ typedef signed long int __int64_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:44:27: error: storage class specified for parameter ‘__uint64_t’
+ typedef unsigned long int __uint64_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:52:18: error: storage class specified for parameter ‘__quad_t’
+ typedef long int __quad_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:53:27: error: storage class specified for parameter ‘__u_quad_t’
+ typedef unsigned long int __u_quad_t;
+ ^
+In file included from /usr/include/stdio.h:35:0,
+ from ../redist/linmath.c:6:
+/usr/include/x86_64-linux-gnu/bits/types.h:124:25: error: storage class specified for parameter ‘__dev_t’
+ __STD_TYPE __DEV_T_TYPE __dev_t; /* Type of device numbers. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:125:25: error: storage class specified for parameter ‘__uid_t’
+ __STD_TYPE __UID_T_TYPE __uid_t; /* Type of user identifications. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:126:25: error: storage class specified for parameter ‘__gid_t’
+ __STD_TYPE __GID_T_TYPE __gid_t; /* Type of group identifications. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:127:25: error: storage class specified for parameter ‘__ino_t’
+ __STD_TYPE __INO_T_TYPE __ino_t; /* Type of file serial numbers. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:128:27: error: storage class specified for parameter ‘__ino64_t’
+ __STD_TYPE __INO64_T_TYPE __ino64_t; /* Type of file serial numbers (LFS).*/
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:129:26: error: storage class specified for parameter ‘__mode_t’
+ __STD_TYPE __MODE_T_TYPE __mode_t; /* Type of file attribute bitmasks. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:130:27: error: storage class specified for parameter ‘__nlink_t’
+ __STD_TYPE __NLINK_T_TYPE __nlink_t; /* Type of file link counts. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:131:25: error: storage class specified for parameter ‘__off_t’
+ __STD_TYPE __OFF_T_TYPE __off_t; /* Type of file sizes and offsets. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:132:27: error: storage class specified for parameter ‘__off64_t’
+ __STD_TYPE __OFF64_T_TYPE __off64_t; /* Type of file sizes and offsets (LFS). */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:133:25: error: storage class specified for parameter ‘__pid_t’
+ __STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:134:26: error: storage class specified for parameter ‘__fsid_t’
+ __STD_TYPE __FSID_T_TYPE __fsid_t; /* Type of file system IDs. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:135:27: error: storage class specified for parameter ‘__clock_t’
+ __STD_TYPE __CLOCK_T_TYPE __clock_t; /* Type of CPU usage counts. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:136:26: error: storage class specified for parameter ‘__rlim_t’
+ __STD_TYPE __RLIM_T_TYPE __rlim_t; /* Type for resource measurement. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:137:28: error: storage class specified for parameter ‘__rlim64_t’
+ __STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS). */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:138:24: error: storage class specified for parameter ‘__id_t’
+ __STD_TYPE __ID_T_TYPE __id_t; /* General type for IDs. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:139:26: error: storage class specified for parameter ‘__time_t’
+ __STD_TYPE __TIME_T_TYPE __time_t; /* Seconds since the Epoch. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:140:30: error: storage class specified for parameter ‘__useconds_t’
+ __STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:141:31: error: storage class specified for parameter ‘__suseconds_t’
+ __STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:143:27: error: storage class specified for parameter ‘__daddr_t’
+ __STD_TYPE __DADDR_T_TYPE __daddr_t; /* The type of a disk address. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:144:25: error: storage class specified for parameter ‘__key_t’
+ __STD_TYPE __KEY_T_TYPE __key_t; /* Type of an IPC key. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:147:29: error: storage class specified for parameter ‘__clockid_t’
+ __STD_TYPE __CLOCKID_T_TYPE __clockid_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:150:27: error: storage class specified for parameter ‘__timer_t’
+ __STD_TYPE __TIMER_T_TYPE __timer_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:153:29: error: storage class specified for parameter ‘__blksize_t’
+ __STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:158:28: error: storage class specified for parameter ‘__blkcnt_t’
+ __STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:159:30: error: storage class specified for parameter ‘__blkcnt64_t’
+ __STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:162:30: error: storage class specified for parameter ‘__fsblkcnt_t’
+ __STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:163:32: error: storage class specified for parameter ‘__fsblkcnt64_t’
+ __STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:166:30: error: storage class specified for parameter ‘__fsfilcnt_t’
+ __STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:167:32: error: storage class specified for parameter ‘__fsfilcnt64_t’
+ __STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:170:28: error: storage class specified for parameter ‘__fsword_t’
+ __STD_TYPE __FSWORD_T_TYPE __fsword_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:172:27: error: storage class specified for parameter ‘__ssize_t’
+ __STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error. */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:175:33: error: storage class specified for parameter ‘__syscall_slong_t’
+ __STD_TYPE __SYSCALL_SLONG_TYPE __syscall_slong_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:177:33: error: storage class specified for parameter ‘__syscall_ulong_t’
+ __STD_TYPE __SYSCALL_ULONG_TYPE __syscall_ulong_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:181:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__loff_t’
+ typedef __off64_t __loff_t; /* Type of file sizes and offsets (LFS). */
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:182:18: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ typedef __quad_t *__qaddr_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:183:15: error: storage class specified for parameter ‘__caddr_t’
+ typedef char *__caddr_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:186:25: error: storage class specified for parameter ‘__intptr_t’
+ __STD_TYPE __SWORD_TYPE __intptr_t;
+ ^
+/usr/include/x86_64-linux-gnu/bits/types.h:189:23: error: storage class specified for parameter ‘__socklen_t’
+ __STD_TYPE __U32_TYPE __socklen_t;
+ ^
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:48:25: error: storage class specified for parameter ‘FILE’
+ typedef struct _IO_FILE FILE;
+ ^
+/usr/include/stdio.h:64:25: error: storage class specified for parameter ‘__FILE’
+ typedef struct _IO_FILE __FILE;
+ ^
+In file included from /usr/include/_G_config.h:20:0,
+ from /usr/include/libio.h:31,
+ from /usr/include/stdio.h:74,
+ from ../redist/linmath.c:6:
+/usr/include/wchar.h:94:3: error: storage class specified for parameter ‘__mbstate_t’
+ } __mbstate_t;
+ ^
+In file included from /usr/include/libio.h:31:0,
+ from /usr/include/stdio.h:74,
+ from ../redist/linmath.c:6:
+/usr/include/_G_config.h:23:3: error: expected specifier-qualifier-list before ‘__off_t’
+ __off_t __pos;
+ ^
+/usr/include/_G_config.h:25:3: error: storage class specified for parameter ‘_G_fpos_t’
+ } _G_fpos_t;
+ ^
+/usr/include/_G_config.h:28:3: error: expected specifier-qualifier-list before ‘__off64_t’
+ __off64_t __pos;
+ ^
+/usr/include/_G_config.h:30:3: error: storage class specified for parameter ‘_G_fpos64_t’
+ } _G_fpos64_t;
+ ^
+In file included from /usr/include/libio.h:49:0,
+ from /usr/include/stdio.h:74,
+ from ../redist/linmath.c:6:
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:40:27: error: storage class specified for parameter ‘__gnuc_va_list’
+ typedef __builtin_va_list __gnuc_va_list;
+ ^
+In file included from /usr/include/stdio.h:74:0,
+ from ../redist/linmath.c:6:
+/usr/include/libio.h:150:14: error: storage class specified for parameter ‘_IO_lock_t’
+ typedef void _IO_lock_t;
+ ^
+In file included from /usr/include/stdio.h:74:0,
+ from ../redist/linmath.c:6:
+/usr/include/libio.h:270:3: error: expected specifier-qualifier-list before ‘__off_t’
+ _IO_off_t _old_offset; /* This used to be _offset but it's too small. */
+ ^
+In file included from /usr/include/stdio.h:74:0,
+ from ../redist/linmath.c:6:
+/usr/include/libio.h:310:25: error: storage class specified for parameter ‘_IO_FILE’
+ typedef struct _IO_FILE _IO_FILE;
+ ^
+/usr/include/libio.h:315:29: error: storage class specified for parameter ‘_IO_2_1_stdin_’
+ extern struct _IO_FILE_plus _IO_2_1_stdin_;
+ ^
+/usr/include/libio.h:316:29: error: storage class specified for parameter ‘_IO_2_1_stdout_’
+ extern struct _IO_FILE_plus _IO_2_1_stdout_;
+ ^
+/usr/include/libio.h:317:29: error: storage class specified for parameter ‘_IO_2_1_stderr_’
+ extern struct _IO_FILE_plus _IO_2_1_stderr_;
+ ^
+/usr/include/libio.h:333:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__io_read_fn’
+ typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
+ ^
+/usr/include/libio.h:341:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__io_write_fn’
+ typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
+ ^
+In file included from /usr/include/stdio.h:74:0,
+ from ../redist/linmath.c:6:
+/usr/include/libio.h:350:43: error: expected declaration specifiers or ‘...’ before ‘__off64_t’
+ typedef int __io_seek_fn (void *__cookie, _IO_off64_t *__pos, int __w);
+ ^
+In file included from /usr/include/stdio.h:74:0,
+ from ../redist/linmath.c:6:
+/usr/include/libio.h:353:13: error: storage class specified for parameter ‘__io_close_fn’
+ typedef int __io_close_fn (void *__cookie);
+ ^
+/usr/include/libio.h:385:25: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int __underflow (_IO_FILE *);
+ ^
+/usr/include/libio.h:386:21: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int __uflow (_IO_FILE *);
+ ^
+/usr/include/libio.h:387:24: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int __overflow (_IO_FILE *, int);
+ ^
+/usr/include/libio.h:429:22: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_getc (_IO_FILE *__fp);
+ ^
+/usr/include/libio.h:430:31: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_putc (int __c, _IO_FILE *__fp);
+ ^
+/usr/include/libio.h:431:22: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_feof (_IO_FILE *__fp) __THROW;
+ ^
+/usr/include/libio.h:432:24: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_ferror (_IO_FILE *__fp) __THROW;
+ ^
+/usr/include/libio.h:434:30: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_peekc_locked (_IO_FILE *__fp);
+ ^
+/usr/include/libio.h:440:28: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern void _IO_flockfile (_IO_FILE *) __THROW;
+ ^
+/usr/include/libio.h:441:30: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern void _IO_funlockfile (_IO_FILE *) __THROW;
+ ^
+/usr/include/libio.h:442:30: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_ftrylockfile (_IO_FILE *) __THROW;
+ ^
+/usr/include/libio.h:459:25: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
+ ^
+/usr/include/libio.h:460:4: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _IO_va_list, int *__restrict);
+ ^
+/usr/include/libio.h:461:26: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
+ ^
+/usr/include/libio.h:462:5: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _IO_va_list);
+ ^
+/usr/include/libio.h:463:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_IO_padn’
+ extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t);
+ ^
+/usr/include/libio.h:464:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_IO_sgetn’
+ extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t);
+ ^
+/usr/include/libio.h:466:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_IO_seekoff’
+ extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+ ^
+/usr/include/libio.h:467:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_IO_seekpos’
+ extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
+ ^
+/usr/include/libio.h:469:35: error: expected declaration specifiers or ‘...’ before ‘_IO_FILE’
+ extern void _IO_free_backup_area (_IO_FILE *) __THROW;
+ ^
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:79:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘va_list’
+ typedef _G_va_list va_list;
+ ^
+/usr/include/stdio.h:90:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘off_t’
+ typedef __off_t off_t;
+ ^
+/usr/include/stdio.h:102:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ssize_t’
+ typedef __ssize_t ssize_t;
+ ^
+/usr/include/stdio.h:110:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘fpos_t’
+ typedef _G_fpos_t fpos_t;
+ ^
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:168:25: error: storage class specified for parameter ‘stdin’
+ extern struct _IO_FILE *stdin; /* Standard input stream. */
+ ^
+/usr/include/stdio.h:169:25: error: storage class specified for parameter ‘stdout’
+ extern struct _IO_FILE *stdout; /* Standard output stream. */
+ ^
+/usr/include/stdio.h:170:25: error: storage class specified for parameter ‘stderr’
+ extern struct _IO_FILE *stderr; /* Standard error output stream. */
+ ^
+/usr/include/stdio.h:178:12: error: storage class specified for parameter ‘remove’
+ extern int remove (const char *__filename) __THROW;
+ ^
+/usr/include/stdio.h:180:12: error: storage class specified for parameter ‘rename’
+ extern int rename (const char *__old, const char *__new) __THROW;
+ ^
+/usr/include/stdio.h:185:12: error: storage class specified for parameter ‘renameat’
+ extern int renameat (int __oldfd, const char *__old, int __newfd,
+ ^
+/usr/include/stdio.h:195:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ extern FILE *tmpfile (void) __wur;
+ ^
+/usr/include/stdio.h:209:14: error: storage class specified for parameter ‘tmpnam’
+ extern char *tmpnam (char *__s) __THROW __wur;
+ ^
+/usr/include/stdio.h:215:14: error: storage class specified for parameter ‘tmpnam_r’
+ extern char *tmpnam_r (char *__s) __THROW __wur;
+ ^
+/usr/include/stdio.h:227:14: error: storage class specified for parameter ‘tempnam’
+ extern char *tempnam (const char *__dir, const char *__pfx)
+ ^
+/usr/include/stdio.h:237:20: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fclose (FILE *__stream);
+ ^
+/usr/include/stdio.h:242:20: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fflush (FILE *__stream);
+ ^
+/usr/include/stdio.h:252:29: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fflush_unlocked (FILE *__stream);
+ ^
+/usr/include/stdio.h:272:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ extern FILE *fopen (const char *__restrict __filename,
+ ^
+/usr/include/stdio.h:278:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ extern FILE *freopen (const char *__restrict __filename,
+ ^
+/usr/include/stdio.h:306:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ extern FILE *fdopen (int __fd, const char *__modes) __THROW __wur;
+ ^
+/usr/include/stdio.h:319:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
+ ^
+/usr/include/stdio.h:325:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
+ ^
+/usr/include/stdio.h:332:21: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW;
+ ^
+/usr/include/stdio.h:336:21: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
+ ^
+/usr/include/stdio.h:337:20: error: expected declaration specifiers or ‘...’ before ‘size_t’
+ int __modes, size_t __n) __THROW;
+ ^
+/usr/include/stdio.h:343:24: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
+ ^
+/usr/include/stdio.h:344:10: error: expected declaration specifiers or ‘...’ before ‘size_t’
+ size_t __size) __THROW;
+ ^
+/usr/include/stdio.h:347:25: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void setlinebuf (FILE *__stream) __THROW;
+ ^
+/usr/include/stdio.h:356:21: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fprintf (FILE *__restrict __stream,
+ ^
+/usr/include/stdio.h:362:12: error: storage class specified for parameter ‘printf’
+ extern int printf (const char *__restrict __format, ...);
+ ^
+/usr/include/stdio.h:364:12: error: storage class specified for parameter ‘sprintf’
+ extern int sprintf (char *__restrict __s,
+ ^
+/usr/include/stdio.h:371:22: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
+ ^
+In file included from /usr/include/libio.h:31:0,
+ from /usr/include/stdio.h:74,
+ from ../redist/linmath.c:6:
+/usr/include/stdio.h:372:8: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _G_va_list __arg);
+ ^
+/usr/include/stdio.h:377:54: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ extern int vprintf (const char *__restrict __format, _G_va_list __arg);
+ ^
+/usr/include/stdio.h:380:8: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _G_va_list __arg) __THROWNL;
+ ^
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:386:44: error: expected declaration specifiers or ‘...’ before ‘size_t’
+ extern int snprintf (char *__restrict __s, size_t __maxlen,
+ ^
+/usr/include/stdio.h:390:45: error: expected declaration specifiers or ‘...’ before ‘size_t’
+ extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+ ^
+In file included from /usr/include/libio.h:31:0,
+ from /usr/include/stdio.h:74,
+ from ../redist/linmath.c:6:
+/usr/include/stdio.h:391:42: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ const char *__restrict __format, _G_va_list __arg)
+ ^
+/usr/include/stdio.h:413:8: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _G_va_list __arg)
+ ^
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:415:12: error: storage class specified for parameter ‘dprintf’
+ extern int dprintf (int __fd, const char *__restrict __fmt, ...)
+ ^
+/usr/include/stdio.h:425:20: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fscanf (FILE *__restrict __stream,
+ ^
+/usr/include/stdio.h:431:12: error: storage class specified for parameter ‘scanf’
+ extern int scanf (const char *__restrict __format, ...) __wur;
+ ^
+/usr/include/stdio.h:433:12: error: storage class specified for parameter ‘sscanf’
+ extern int sscanf (const char *__restrict __s,
+ ^
+In file included from /usr/include/features.h:367:0,
+ from /usr/include/math.h:26,
+ from ../redist/linmath.c:4:
+/usr/include/stdio.h:443:12: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
+ ^
+/usr/include/stdio.h:446:12: error: storage class specified for parameter ‘scanf’
+ extern int __REDIRECT (scanf, (const char *__restrict __format, ...),
+ ^
+/usr/include/stdio.h:446:12: error: redefinition of parameter ‘scanf’
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:431:12: note: previous definition of ‘scanf’ was here
+ extern int scanf (const char *__restrict __format, ...) __wur;
+ ^
+In file included from /usr/include/features.h:367:0,
+ from /usr/include/math.h:26,
+ from ../redist/linmath.c:4:
+/usr/include/stdio.h:448:12: error: storage class specified for parameter ‘sscanf’
+ extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
+ ^
+/usr/include/stdio.h:448:12: error: redefinition of parameter ‘sscanf’
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:433:12: note: previous definition of ‘sscanf’ was here
+ extern int sscanf (const char *__restrict __s,
+ ^
+/usr/include/stdio.h:471:21: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
+ ^
+In file included from /usr/include/libio.h:31:0,
+ from /usr/include/stdio.h:74,
+ from ../redist/linmath.c:6:
+/usr/include/stdio.h:472:7: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _G_va_list __arg)
+ ^
+/usr/include/stdio.h:479:53: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ extern int vscanf (const char *__restrict __format, _G_va_list __arg)
+ ^
+/usr/include/stdio.h:484:40: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ const char *__restrict __format, _G_va_list __arg)
+ ^
+In file included from /usr/include/features.h:367:0,
+ from /usr/include/math.h:26,
+ from ../redist/linmath.c:4:
+/usr/include/stdio.h:494:12: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int __REDIRECT (vfscanf,
+ ^
+/usr/include/stdio.h:496:37: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ const char *__restrict __format, _G_va_list __arg),
+ ^
+/usr/include/stdio.h:500:5: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _G_va_list __arg), __isoc99_vscanf)
+ ^
+/usr/include/stdio.h:505:8: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’
+ _G_va_list __arg), __isoc99_vsscanf)
+ ^
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:531:19: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fgetc (FILE *__stream);
+ ^
+/usr/include/stdio.h:532:18: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int getc (FILE *__stream);
+ ^
+/usr/include/stdio.h:538:12: error: storage class specified for parameter ‘getchar’
+ extern int getchar (void);
+ ^
+/usr/include/stdio.h:550:27: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int getc_unlocked (FILE *__stream);
+ ^
+/usr/include/stdio.h:551:12: error: storage class specified for parameter ‘getchar_unlocked’
+ extern int getchar_unlocked (void);
+ ^
+/usr/include/stdio.h:561:28: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fgetc_unlocked (FILE *__stream);
+ ^
+/usr/include/stdio.h:573:28: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fputc (int __c, FILE *__stream);
+ ^
+/usr/include/stdio.h:574:27: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int putc (int __c, FILE *__stream);
+ ^
+/usr/include/stdio.h:580:12: error: storage class specified for parameter ‘putchar’
+ extern int putchar (int __c);
+ ^
+/usr/include/stdio.h:594:37: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fputc_unlocked (int __c, FILE *__stream);
+ ^
+/usr/include/stdio.h:602:36: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int putc_unlocked (int __c, FILE *__stream);
+ ^
+/usr/include/stdio.h:603:12: error: storage class specified for parameter ‘putchar_unlocked’
+ extern int putchar_unlocked (int __c);
+ ^
+/usr/include/stdio.h:610:18: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int getw (FILE *__stream);
+ ^
+/usr/include/stdio.h:613:27: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int putw (int __w, FILE *__stream);
+ ^
+/usr/include/stdio.h:622:52: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+ ^
+/usr/include/stdio.h:665:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__getdelim’
+ extern _IO_ssize_t __getdelim (char **__restrict __lineptr,
+ ^
+/usr/include/stdio.h:668:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘getdelim’
+ extern _IO_ssize_t getdelim (char **__restrict __lineptr,
+ ^
+/usr/include/stdio.h:678:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘getline’
+ extern _IO_ssize_t getline (char **__restrict __lineptr,
+ ^
+/usr/include/stdio.h:689:47: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
+ ^
+/usr/include/stdio.h:695:12: error: storage class specified for parameter ‘puts’
+ extern int puts (const char *__s);
+ ^
+/usr/include/stdio.h:702:29: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int ungetc (int __c, FILE *__stream);
+ ^
+/usr/include/stdio.h:709:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘fread’
+ extern size_t fread (void *__restrict __ptr, size_t __size,
+ ^
+/usr/include/stdio.h:715:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘fwrite’
+ extern size_t fwrite (const void *__restrict __ptr, size_t __size,
+ ^
+/usr/include/stdio.h:737:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘fread_unlocked’
+ extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+ ^
+/usr/include/stdio.h:739:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘fwrite_unlocked’
+ extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
+ ^
+/usr/include/stdio.h:749:19: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fseek (FILE *__stream, long int __off, int __whence);
+ ^
+/usr/include/stdio.h:754:24: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern long int ftell (FILE *__stream) __wur;
+ ^
+/usr/include/stdio.h:759:21: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void rewind (FILE *__stream);
+ ^
+/usr/include/stdio.h:773:20: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fseeko (FILE *__stream, __off_t __off, int __whence);
+ ^
+/usr/include/stdio.h:773:36: error: expected declaration specifiers or ‘...’ before ‘__off_t’
+ extern int fseeko (FILE *__stream, __off_t __off, int __whence);
+ ^
+/usr/include/stdio.h:778:16: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ftello’
+ extern __off_t ftello (FILE *__stream) __wur;
+ ^
+/usr/include/stdio.h:798:21: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
+ ^
+/usr/include/stdio.h:798:48: error: unknown type name ‘fpos_t’
+ extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
+ ^
+/usr/include/stdio.h:803:21: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fsetpos (FILE *__stream, const fpos_t *__pos);
+ ^
+/usr/include/stdio.h:803:43: error: unknown type name ‘fpos_t’
+ extern int fsetpos (FILE *__stream, const fpos_t *__pos);
+ ^
+/usr/include/stdio.h:826:23: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void clearerr (FILE *__stream) __THROW;
+ ^
+/usr/include/stdio.h:828:18: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int feof (FILE *__stream) __THROW __wur;
+ ^
+/usr/include/stdio.h:830:20: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int ferror (FILE *__stream) __THROW __wur;
+ ^
+/usr/include/stdio.h:835:32: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void clearerr_unlocked (FILE *__stream) __THROW;
+ ^
+/usr/include/stdio.h:836:27: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int feof_unlocked (FILE *__stream) __THROW __wur;
+ ^
+/usr/include/stdio.h:837:29: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int ferror_unlocked (FILE *__stream) __THROW __wur;
+ ^
+/usr/include/stdio.h:846:13: error: storage class specified for parameter ‘perror’
+ extern void perror (const char *__s);
+ ^
+In file included from /usr/include/stdio.h:853:0,
+ from ../redist/linmath.c:6:
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:26:12: error: storage class specified for parameter ‘sys_nerr’
+ extern int sys_nerr;
+ ^
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:27:26: error: storage class specified for parameter ‘sys_errlist’
+ extern const char *const sys_errlist[];
+ ^
+In file included from ../redist/linmath.c:6:0:
+/usr/include/stdio.h:858:20: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fileno (FILE *__stream) __THROW __wur;
+ ^
+/usr/include/stdio.h:863:29: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int fileno_unlocked (FILE *__stream) __THROW __wur;
+ ^
+/usr/include/stdio.h:872:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
+ extern FILE *popen (const char *__command, const char *__modes) __wur;
+ ^
+/usr/include/stdio.h:878:20: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int pclose (FILE *__stream);
+ ^
+/usr/include/stdio.h:884:14: error: storage class specified for parameter ‘ctermid’
+ extern char *ctermid (char *__s) __THROW;
+ ^
+/usr/include/stdio.h:912:24: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void flockfile (FILE *__stream) __THROW;
+ ^
+/usr/include/stdio.h:916:26: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern int ftrylockfile (FILE *__stream) __THROW __wur;
+ ^
+/usr/include/stdio.h:919:26: error: expected declaration specifiers or ‘...’ before ‘FILE’
+ extern void funlockfile (FILE *__stream) __THROW;
+ ^
+../redist/linmath.c:27:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:34:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:41:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:48:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:55:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:63:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:68:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:80:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:87:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:92:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:111:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:116:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:124:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:146:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:154:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:168:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:173:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:179:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:185:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:226:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:259:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:291:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:299:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:306:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:314:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:322:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:330:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:339:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:344:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:351:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:359:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:366:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:402:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:425:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:449:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:458:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+../redist/linmath.c:480:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
+ {
+ ^
+In file included from ../redist/linmath.c:3:0:
+../redist/linmath.h:106:6: error: old-style parameter declarations in prototyped function definition
+ void quattomatrix33(FLT * matrix33, const FLT * qin)
+ ^
+../redist/linmath.c:530:1: error: expected ‘{’ at end of input
+ }
+ ^
+make: *** [all] Error 1
diff --git a/attic/dave/fileutil.c b/attic/dave/fileutil.c
new file mode 100644
index 0000000..04dc241
--- /dev/null
+++ b/attic/dave/fileutil.c
@@ -0,0 +1,133 @@
+#include "fileutil.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#define PI 3.14159265358979323846264
+
+
+og_mutex_t read_mutex;
+og_thread_t read_thread;
+double read_hmdAngles[NUM_SWEEP][NUM_HMD];
+int read_hmdAngleViewed[NUM_SWEEP][NUM_HMD];
+int read_frameno=0;
+
+static FILE *fopen_orDie(const char *path, const char *flag)
+{
+ FILE *f = fopen(path, flag);
+ if (f == NULL) {
+ printf("ERROR could not oepn %s for %s\n", path, flag);
+ exit(1);
+ }
+ return f;
+}
+
+static void SeekToken(FILE *f, const char *keyword)
+{
+ char token[4096];
+ do {
+ fscanf(f, "%s", token);
+ } while( strcmp(token,keyword)!=0 && !feof(f) );
+}
+
+void LoadLighthousePos(
+ const char *path,
+ float *x, float *y, float *z,
+ float *qi, float *qj, float *qk, float *qreal)
+{
+ FILE *f = fopen_orDie(path,"r");
+ SeekToken(f, "POS:");
+ fscanf(f, "%f %f %f\n", x, y, z);
+ SeekToken(f, "QUAT:");
+ fscanf(f, "%f %f %f %f\n", qreal, qi, qj, qk);
+ fclose (f);
+}
+
+void LoadHmdProcessedDataAngles(
+ const char *path,
+ double angles[NUM_SWEEP][NUM_HMD])
+{
+ int i,j;
+ char type[256];
+ char sweep[256];
+ int id;
+ int nSweep;
+ double ang;
+ double d1,d2,d3; // revisit these numbers later
+
+ // Initialize all of the angles to -9999
+ for (i=0; i<NUM_SWEEP; i++) {
+ for (j=0; j<NUM_HMD; j++) {
+ angles[i][j] = -9999.0; // Initially no value
+ }
+ }
+
+ FILE *f = fopen_orDie(path, "r");
+
+ while (!feof(f))
+ {
+ // Read the line from the file
+ int rt=fscanf(f, "%s %s %d %d %lf %lf %lf %lf",
+ &type, &sweep, &id, &nSweep, &ang,
+ &d1,&d2,&d3);
+
+ if (rt<8) { break; }
+
+ // Only hmd points
+ if ( strcmp(type,"HMD")!=0 ) { continue; }
+
+ // Which sweep is it?
+ int sweepId=-1;
+ if ( strcmp(sweep,"LX")==0 ) { sweepId=SWEEP_LX; }
+ else if ( strcmp(sweep,"LY")==0 ) { sweepId=SWEEP_LY; }
+ else if ( strcmp(sweep,"RX")==0 ) { sweepId=SWEEP_RX; }
+ else if ( strcmp(sweep,"RY")==0 ) { sweepId=SWEEP_RY; }
+ else { continue; }
+
+ // Convert the angle from ticks to radians
+ angles[sweepId][id] = (PI / 400000.0) * ( ang-200000.0 );
+ }
+
+ fclose(f);
+}
+
+void *ThreadReadHmtAngles(void *junk)
+{
+ char house[256];
+ char xy[256];
+ char hmd[256];
+ double ts;
+ int id;
+ int syncid;
+ int timeInSweep;
+ int length;
+ //lighthouse sweep hmdOrwmd timestamp id syncid timeinsweep length
+
+ while(1) {
+ int rt=scanf("%s %s %s %lf %d %d %d %d", house, xy, hmd, &ts, &id, &syncid, &timeInSweep, &length);
+ if (rt==8)
+ {
+ //int rt=scanf("%s %s %s %lf %d %d %d %d", house, xy, hmd, &ts, &id, &syncid, &timeInSweep, &length);
+ //printf( "%s %s %s %f %d %d %d %d\n", house, xy, hmd, ts,id, syncid, timeInSweep, length );
+
+ if( id < 0 ) continue;
+ int sweepId=0;
+ if ( house[0]=='R' ) { sweepId+=2; }
+ if ( xy[0] =='Y' ) { sweepId++; }
+ double angle = (PI / 400000.0) * ( (double)timeInSweep-200000.0 );
+
+ if ( strcmp(hmd,"HMD")==0 ) { id += 0; }
+ else if ( strcmp(hmd,"WM0")==0 ) { id += 32; }
+ else if ( strcmp(hmd,"WM1")==0 ) { id += 56; }
+ else { continue; }
+
+ if ( id<0 || id >NUM_HMD) { continue; }
+
+ OGLockMutex (read_mutex);
+ read_hmdAngles[sweepId][id] = angle;
+ OGUnlockMutex(read_mutex);
+ read_hmdAngleViewed[sweepId][id] = read_frameno;
+ }
+ }
+}
+
+
diff --git a/attic/dave/fileutil.h b/attic/dave/fileutil.h
new file mode 100644
index 0000000..e5da244
--- /dev/null
+++ b/attic/dave/fileutil.h
@@ -0,0 +1,35 @@
+#ifndef _fileutil_h_
+#define _fileutil_h_
+
+#include <pthread.h>
+#include "os_generic.h"
+
+void LoadLighthousePos(
+ const char *path,
+ float *x, float *y, float *z,
+ float *qi, float *qj, float *qk, float *qreal);
+
+
+// first 32 are hmd, next 24 wm0 next 24 wm1
+#define NUM_HMD 80
+#define NUM_SWEEP 4
+#define SWEEP_LX 0
+#define SWEEP_LY 1
+#define SWEEP_RX 2
+#define SWEEP_RY 3
+void LoadHmdProcessedDataAngles(
+ const char *path,
+ double angle[NUM_SWEEP][NUM_HMD]);
+
+
+extern og_mutex_t read_mutex;
+extern og_thread_t read_thread;
+extern double read_hmdAngles[NUM_SWEEP][NUM_HMD];
+extern int read_hmdAngleViewed[NUM_SWEEP][NUM_HMD];
+extern int read_frameno;
+void *ThreadReadHmtAngles(void *junk);
+
+
+#endif // __fileutil_h_
+
+
diff --git a/attic/dave/kalman_filter.c b/attic/dave/kalman_filter.c
new file mode 100644
index 0000000..3d3406a
--- /dev/null
+++ b/attic/dave/kalman_filter.c
@@ -0,0 +1,72 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "kalman_filter.h"
+
+void KalmanPredict(
+ KAL_VEC(xhat_k_km1), /* OUTPUT: (S) Predicted state at time 'k' */
+ KAL_MAT(P_k_km1), /* OUTPUT: (S x S) Predicted covariance at time 'k' */
+ KAL_MAT(P_km1_km1), /* INPUT: (S x S) Updated covariance from time 'k-1' */
+ KAL_VEC(xhat_km1_km1), /* INPUT: (S) Updated state from time 'k-1' */
+ KAL_MAT(F_k), /* INPUT: (S x S) State transition model */
+ KAL_MAT(B_k), /* INPUT: (S x U) Control input model */
+ KAL_VEC(u_k), /* INPUT: (U) Control vector */
+ KAL_MAT(Q_k), /* INPUT: (S x S) Covariance of process noise */
+ int S, /* INPUT: Number of dimensions in state vector */
+ int U) /* INPUT: Size of control input vector */
+{
+ KAL_MAT(F_k_tran);
+ KAL_MAT(F_k__P_km1_km1);
+
+ // Predicted state: xhat_k_km1 = Fk * xhat_km1_km1 + Bk * uk
+ MUL(F_k, xhat_km1_km1, xhat_k_km1, S,S,1);
+
+ // Predicted covar: P_k_km1 = Fk * P_km1_km1 * Fk' + Qk
+ MUL(F_k, P_km1_km1, F_k__P_km1_km1, S, S, S);
+ TRANSP(F_k, F_k_tran, S, S);
+ MULADD(F_k__P_km1_km1, F_k_tran, Q_k, P_k_km1, S, S, S);
+}
+
+void KalmanUpdate(
+ KAL_VEC(xhat_k_k), /* (S) OUTPUT: Updated state at time 'k' */
+ KAL_MAT(P_k_k), /* (S x S) OUTPUT: Updated covariance at time 'k' */
+ KAL_VEC(xhat_k_km1), /* (S) INPUT: Predicted state at time 'k' */
+ KAL_MAT(P_k_km1), /* (S x S) INPUT: Predicted covariance at time 'k' */
+ KAL_VEC(z_k), /* (B) INPUT: Observation vector */
+ KAL_MAT(H_k), /* (B x S) INPUT: Observational model */
+ KAL_MAT(R_k), /* (S x S) INPUT: Covariance of observational noise */
+ int B, /* INPUT: Number of observations in observation vector */
+ int S) /* INPUT: Number of measurements in the state vector */
+{
+ // UPDATE PHASE
+ // Measurement residual: yhat_k = zk - Hk * xhat_k_km1
+ KAL_MAT(yhat_k); /* (B x 1) */
+ GMULADD(H_k,xhat_k_km1,z_k,yhat_k,-1.0f,1.0f,B,S,1);
+
+ // Residual covariance: S_k = H_k * P_k_km1 * H_k' + R_k
+ KAL_MAT(H_k_transp); /* (S x B) */
+ KAL_MAT(P_k_km1__H_k_transp); /* (S x B) */
+ KAL_MAT(S_k); /* (B x B) */
+ TRANSP(H_k,H_k_transp,B,S);
+ MUL(P_k_km1,H_k_transp,P_k_km1__H_k_transp,S,S,B);
+ MULADD(H_k,P_k_km1__H_k_transp,R_k,S_k,B,S,B);
+
+ // Optimal Kalman gain: K_k = P_k_km1 * H_k' * inv(S_k)
+ KAL_MAT(K_k); /* (S x B) */
+ KAL_MAT(S_k_inv); /* (B x B) */
+ INV(S_k,S_k_inv,B);
+ MUL(P_K_km1__H_k_transp,S_k_inv,K_k,S,B,B);
+
+ // Updated state esti: xhat_k_k = xhat_k_km1 + K_k * yhat_k
+ MULADD(K_k,yhat_k,xhat_k_km1,S,B,1);
+
+ // Updated covariance: P_k_k = (I - K_k * H_k) * P_k_km1
+ KAL_MAT(Ident); /* (S x S) */
+ KAL_MAT(I_minus_K_k_H_k);
+ IDENTITY(Ident,S);
+ GMULADD(K_k,H_k,Ident,I_minus_K_k_H_k,1.0,-1.0,S,B,S);
+ MUL(I_minus_K_k_H_k,P_k_km1,P_k_k,S,S,1);
+}
+
+
+
diff --git a/attic/dave/kalman_filter.h b/attic/dave/kalman_filter.h
new file mode 100644
index 0000000..6511fac
--- /dev/null
+++ b/attic/dave/kalman_filter.h
@@ -0,0 +1,116 @@
+#ifndef __KALMAN_FILTER_H__
+#define __KALMAN_FILTER_H__
+
+#include "dclapack.h"
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Legend:
+ * xhat_k_km1 -- Predicted state at time 'k' using information available at time 'k-1'
+ * P_k_km1 -- Predicted covariance at time 'k' using information available at time 'k-1'
+ * F_k -- State transition model
+ * u_k -- Control vector (i.e. external process)
+ * B_k -- Control input model
+ * w_k -- Gaussian White noise
+ * H_k -- Observation model (to transform true state into measurements)
+ * Q_k -- Covariance matrix of process noise
+ * R_k -- Covariance of observational noise
+ * v_k -- Gaussian white observational noise
+ *
+ * PREDICTION PHASE
+ * Predicted state: xhat_k_km1 = Fk * xhat_km1_km1 + Bk * uk
+ * Predicted covar: P_k_km1 = Fk * P_km1_km1 * Fk' + Qk
+ *
+ * UPDATE PHASE
+ * Measurement residual: yhat_k = zk - Hk * xhat_k_km1
+ * Residual covariance: S_k = H_k * P_k_km1 * H_k' + R_k
+ * Optimal Kalman gain: K_k = P_k_km1 * H_k' * inv(S_k)
+ * Updated state esti: xhat_k_k = xhat_k_km1 + K_k * yhat_k
+ * Updated covariance: P_k_k = (I - K_k * H_k) * P_k_km1
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define KAL_STRIDE 36
+#define KAL_MAT(_var) float _var[ORDER][ORDER]
+#define KAL_VEC(_var) float _var[ORDER][ORDER]
+
+void KalmanPredict(
+ KAL_VEC(xhat_k_km1), /* OUTPUT: (S) Predicted state at time 'k' */
+ KAL_MAT(P_k_km1), /* OUTPUT: (S x S) Predicted covariance at time 'k' */
+ KAL_MAT(P_km1_km1), /* INPUT: (S x S) Updated covariance from time 'k-1' */
+ KAL_VEC(xhat_km1_km1), /* INPUT: (S) Updated state from time 'k-1' */
+ KAL_MAT(F_k), /* INPUT: (S x S) State transition model */
+ KAL_MAT(B_k), /* INPUT: (S x U) Control input model */
+ KAL_VEC(u_k), /* INPUT: (U) Control vector */
+ KAL_MAT(Q_k), /* INPUT: (S x S) Covariance of process noise */
+ int S, /* INPUT: Number of dimensions in state vector */
+ int U); /* INPUT: Size of control input vector */
+
+void KalmanUpdate(
+ KAL_VEC(xhat_k_k), /* (S) OUTPUT: Updated state at time 'k' */
+ KAL_MAT(P_k_k), /* (S x S) OUTPUT: Updated covariance at time 'k' */
+ KAL_VEC(xhat_k_km1), /* (S) INPUT: Predicted state at time 'k' */
+ KAL_MAT(P_k_km1), /* (S x S) INPUT: Predicted covariance at time 'k' */
+ KAL_VEC(z_k), /* (B) INPUT: Observation vector */
+ KAL_MAT(H_k), /* (B x S) INPUT: Observational model */
+ KAL_MAT(R_k), /* (S x S) INPUT: Covariance of observational noise */
+ int B, /* INPUT: Number of observations in observation vector */
+ int S); /* INPUT: Number of measurements in the state vector */
+
+/* * * * * * * * * * * *
+ * State vector format:
+ * xhat[12] = { x, y, z, ix, iy, iz, jx, jy, jz, kx, ky, kz, vx, vy, vz, vix, viy, viz, vjx, vjy, vjz, vkx, vky, vkz, ax, ay, az, aix, aiy, aiz, ajx, ajy, ajz, akx, aky, akz },
+ * 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
+ * where,
+ * i -- right direction vector
+ * j -- forward direction vector
+ * k -- up direction vector
+ * * * * * * * * * * * */
+
+/* positional state */
+#define ST_X 0
+#define ST_Y 1
+#define ST_Z 2
+#define ST_IX 3
+#define ST_IY 4
+#define ST_IZ 5
+#define ST_JX 6
+#define ST_JY 7
+#define ST_JZ 8
+#define ST_KX 9
+#define ST_KY 10
+#define ST_KZ 11
+
+/* velocity state */
+#define ST_VX 12
+#define ST_VY 13
+#define ST_VZ 14
+#define ST_VIX 15
+#define ST_VIY 16
+#define ST_VIZ 17
+#define ST_VJX 18
+#define ST_VJY 19
+#define ST_VJZ 20
+#define ST_VKX 21
+#define ST_VKY 22
+#define ST_VKZ 23
+
+/* acceleration state */
+#define ST_AX 24
+#define ST_AY 25
+#define ST_AZ 26
+#define ST_AIX 27
+#define ST_AIY 28
+#define ST_AIZ 29
+#define ST_AJX 30
+#define ST_AJY 31
+#define ST_AJZ 32
+#define ST_AKX 33
+#define ST_AKY 34
+#define ST_AKZ 35
+
+
+/* * * * * * * * * * * *
+ * Measurement:
+ * * * * * * * * * * * */
+
+#endif
+
diff --git a/attic/dave/main.c b/attic/dave/main.c
new file mode 100644
index 0000000..ff187aa
--- /dev/null
+++ b/attic/dave/main.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include "kalman_filter.h"
+
+int main()
+{
+ KAL_VEC(xhat_k_km1); /* OUTPUT: (S) Predicted state at time 'k' */
+ KAL_MAT(P_k_km1); /* OUTPUT: (S x S) Predicted covariance at time 'k' */
+ KAL_MAT(P_km1_km1); /* INPUT: (S x S) Updated covariance from time 'k-1' */
+ KAL_VEC(xhat_km1_km1); /* INPUT: (S) Updated state from time 'k-1' */
+ KAL_MAT(F_k); /* INPUT: (S x S) State transition model */
+ KAL_MAT(B_k); /* INPUT: (S x U) Control input model */
+ KAL_VEC(u_k); /* INPUT: (U) Control vector */
+ KAL_MAT(Q_k); /* INPUT: (S x S) Covariance of process noise */
+
+ KalmanPredict(
+ xhat_k_km1, /* OUTPUT: (S) Predicted state at time 'k' */
+ P_k_km1, /* OUTPUT: (S x S) Predicted covariance at time 'k' */
+ P_km1_km1, /* INPUT: (S x S) Updated covariance from time 'k-1' */
+ xhat_km1_km1, /* INPUT: (S) Updated state from time 'k-1' */
+ F_k, /* INPUT: (S x S) State transition model */
+ B_k, /* INPUT: (S x U) Control input model */
+ u_k, /* INPUT: (U) Control vector */
+ Q_k, /* INPUT: (S x S) Covariance of process noise */
+ 36, /* INPUT: Number of dimensions in state vector */
+ 36); /* INPUT: Size of control input vector */
+
+ return 0;
+}
+
diff --git a/attic/dave/olddata/HMD_normals.csv b/attic/dave/olddata/HMD_normals.csv
new file mode 100644
index 0000000..9abb886
--- /dev/null
+++ b/attic/dave/olddata/HMD_normals.csv
@@ -0,0 +1,32 @@
+0.656529 0.080037 0.750042
+1.000000 0.000000 0.000000
+0.951033 0.192296 -0.241987
+0.863341 0.261141 -0.431796
+0.562083 0.827080 -0.000702
+0.556742 0.818617 -0.141085
+0.127514 0.360969 0.923819
+0.197328 0.721208 0.664019
+0.197328 -0.720504 0.664783
+0.460200 0.003066 0.887810
+0.025263 -0.748333 0.662842
+0.556742 -0.818766 -0.140217
+0.562083 -0.827081 0.000175
+0.863341 -0.261598 -0.431519
+0.951034 -0.192552 -0.241783
+0.656529 -0.079242 0.750127
+-0.197328 0.721208 0.664019
+-0.127514 0.360969 0.923819
+-0.556742 0.818617 -0.141085
+-0.562083 0.827080 -0.000702
+-0.863341 0.261141 -0.431796
+-0.951033 0.192296 -0.241987
+-1.000000 0.000000 0.000000
+-0.656529 0.080037 0.750042
+-0.656529 -0.079242 0.750127
+-0.951034 -0.192552 -0.241783
+-0.863341 -0.261598 -0.431519
+-0.562083 -0.827081 0.000175
+-0.556742 -0.818766 -0.140217
+-0.025263 -0.748333 0.662842
+-0.460200 0.003066 0.887810
+-0.197328 -0.720504 0.664783
diff --git a/attic/dave/olddata/HMD_points.csv b/attic/dave/olddata/HMD_points.csv
new file mode 100644
index 0000000..9c8f61d
--- /dev/null
+++ b/attic/dave/olddata/HMD_points.csv
@@ -0,0 +1,32 @@
+0.085242 0.017104 0.046493
+0.093076 -0.000052 0.035027
+0.086979 0.016748 0.020598
+0.089932 0.029368 0.029518
+0.080100 0.045401 0.034918
+0.050949 0.052772 0.033339
+0.024403 0.019970 0.059476
+0.047578 0.033637 0.053722
+0.047777 -0.034022 0.053513
+0.057882 -0.000007 0.056592
+0.027400 -0.051728 0.046844
+0.051043 -0.052940 0.032966
+0.080512 -0.045486 0.034783
+0.090041 -0.029387 0.029598
+0.086948 -0.016462 0.020596
+0.085268 -0.017169 0.046332
+-0.047738 0.033671 0.053643
+-0.024283 0.020141 0.059533
+-0.050979 0.052769 0.033118
+-0.080175 0.045313 0.034850
+-0.090020 0.029306 0.029481
+-0.087090 0.016787 0.020453
+-0.093113 0.000154 0.034906
+-0.085269 0.017293 0.046345
+-0.085128 -0.017079 0.046558
+-0.086970 -0.016675 0.020667
+-0.089911 -0.029458 0.029795
+-0.080444 -0.045268 0.034661
+-0.051102 -0.052996 0.033321
+-0.027283 -0.051820 0.046794
+-0.057974 -0.000051 0.056586
+-0.047652 -0.033921 0.053604
diff --git a/attic/dave/olddata/ptinfo.csv b/attic/dave/olddata/ptinfo.csv
new file mode 100644
index 0000000..2dbef65
--- /dev/null
+++ b/attic/dave/olddata/ptinfo.csv
@@ -0,0 +1,88 @@
+0 0 0 1024 0.054304 8.087056 7.006970 0.000005 0.000095 49.911564
+0 0 1 1024 -0.091073 7.633667 2.124995 0.000002 0.000032 28.309638
+4 0 0 1024 0.046903 7.663818 9.134277 0.000014 0.000274 87.982354
+4 0 1 1024 -0.086459 8.770345 2.726730 0.000011 0.000192 29.506709
+5 0 0 1024 0.047980 4.033020 8.087671 0.000017 0.000218 50.499310
+5 0 1 1024 -0.077373 7.318115 2.557700 0.000005 0.000082 24.065775
+6 0 0 1024 0.062184 9.521423 7.429031 0.000003 0.000035 38.676732
+6 0 1 1024 -0.073973 9.523905 1.995981 0.000002 0.000029 26.113657
+7 0 0 1024 0.056254 9.999064 7.497290 0.000003 0.000044 38.734072
+7 0 1 1024 -0.079104 9.753560 2.103774 0.000004 0.000051 33.619688
+8 1 0 1024 -0.006291 9.665955 1.987640 0.000002 0.000028 15.453922
+8 1 1 1024 -0.117330 10.177124 1.600708 0.000001 0.000018 11.038096
+9 0 0 1025 0.062143 8.118984 6.820550 0.000004 0.000055 40.521475
+9 0 1 1023 -0.085365 8.509694 1.896965 0.000003 0.000091 21719098.365862
+9 1 0 1024 0.000557 6.315043 1.998499 0.000010 0.000087 21.686142
+9 1 1 1024 -0.113388 7.437968 1.836344 0.000002 0.000035 18.467548
+10 1 0 1024 -0.009943 9.343363 1.995316 0.000002 0.000031 17.584078
+10 1 1 1024 -0.124325 9.785502 1.689753 0.000002 0.000038 11.692163
+11 1 1 1024 -0.118290 6.393616 2.064949 0.000007 0.000127 19.804200
+12 1 0 1024 -0.014712 6.424642 2.678035 0.000011 0.000116 31.494265
+12 1 1 1024 -0.109233 7.731120 2.279953 0.000007 0.000190 18.323990
+15 0 0 1024 0.060565 6.858704 7.184426 0.000008 0.000088 44.052520
+15 0 1 1024 -0.094258 6.385498 2.018832 0.000010 0.000091 29.446135
+15 1 0 1024 -0.006425 3.219747 2.549749 0.000022 0.000239 26.656846
+15 1 1 1024 -0.106455 6.234049 1.960842 0.000006 0.000076 13.899017
+17 0 0 1024 0.066623 8.772827 6.714717 0.000003 0.000034 33.014899
+17 0 1 1024 -0.060226 8.462301 2.015937 0.000002 0.000022 32.443223
+23 1 1 1024 -0.155699 4.259481 2.133325 0.000009 0.000119 14.051344
+24 1 0 1024 0.004956 2.748250 3.060253 0.000032 0.000273 24.108629
+24 1 1 1024 -0.156870 7.030355 1.539771 0.000003 0.000047 11.937263
+27 1 0 1024 -0.004080 5.997660 2.117311 0.000010 0.000096 25.358188
+27 1 1 1024 -0.157007 8.123576 1.820049 0.000003 0.000063 11.321934
+28 1 0 1024 -0.007485 3.633423 2.815398 0.000022 0.000202 29.154675
+28 1 1 1024 -0.148765 6.027649 1.957405 0.000006 0.000081 13.776313
+29 1 0 1024 -0.006364 9.275757 2.122339 0.000002 0.000026 16.821591
+29 1 1 1024 -0.140631 9.910583 1.611250 0.000002 0.000023 13.197373
+30 0 0 1024 0.072943 3.733805 6.264887 0.000006 0.000071 35.965622
+30 0 1 1024 -0.052506 4.387878 3.479865 0.000009 0.000093 44.349223
+30 1 0 1024 0.008406 5.021810 2.308727 0.000008 0.000085 15.880164
+30 1 1 1024 -0.147555 8.227193 1.637723 0.000002 0.000022 13.866484
+31 1 0 1024 0.000033 9.308573 1.886001 0.000002 0.000017 19.936102
+31 1 1 1024 -0.145700 9.870667 1.610662 0.000001 0.000017 14.105948
+32 1 0 1016 -0.101837 5.457534 2.442544 0.000008 0.000085 16.869970
+32 1 1 1018 -0.100882 6.643766 1.484100 0.000002 0.000027 17.016439
+33 1 0 1019 -0.107913 5.854473 2.030354 0.000008 0.000111 17.656553
+33 1 1 1018 -0.104750 6.514285 1.579995 0.000002 0.000026 18.046024
+34 1 0 1020 -0.108257 6.882782 1.880494 0.000003 0.000038 14.125138
+34 1 1 1018 -0.110099 6.917526 1.892384 0.000002 0.000016 13.833723
+35 1 0 1022 -0.121796 8.334801 1.807161 0.000002 0.000028 14.423969
+35 1 1 1018 -0.107517 7.105231 1.554912 0.000002 0.000022 15.379143
+36 1 0 1021 -0.111978 8.395752 1.902573 0.000002 0.000021 12.684395
+36 1 1 1018 -0.103989 7.755075 1.513899 0.000002 0.000017 15.735186
+37 1 0 1022 -0.119498 8.144121 2.128056 0.000001 0.000016 11.799663
+37 1 1 1018 -0.086472 6.760928 1.440899 0.000002 0.000032 16.451576
+38 1 0 1022 -0.126362 8.366418 1.890943 0.000002 0.000024 15.547028
+38 1 1 1018 -0.099977 7.628377 1.647596 0.000003 0.000027 13.428394
+39 1 0 1022 -0.128867 8.546498 1.952486 0.000002 0.000020 13.761684
+39 1 1 1018 -0.091108 8.340987 1.392215 0.000002 0.000030 15.791367
+41 1 0 858 -0.117675 8.663534 2.024164 0.000002 0.000016 13.786543
+41 1 1 852 -0.083109 7.402558 1.346682 0.000001 0.000017 14.923250
+42 1 0 1020 -0.110949 8.397712 2.080674 0.000002 0.000028 16.436445
+42 1 1 1017 -0.080808 7.596423 1.468899 0.000002 0.000024 14.864047
+44 0 0 1021 0.098696 8.919217 4.402947 0.000003 0.000022 29.326257
+44 0 1 1023 -0.134452 8.670434 2.040941 0.000002 0.000027 25.185552
+54 0 0 1021 0.095352 9.054522 4.727093 0.000004 0.000049 27.342838
+54 0 1 1023 -0.158791 8.836144 2.087028 0.000003 0.000027 22.937738
+68 0 0 912 -0.126928 4.094275 2.984245 0.000000 0.000005 31.298089
+68 0 1 916 0.529440 2.825646 2.494563 0.000008 0.000066 26.030924
+68 1 0 916 0.282512 3.705604 1.662663 0.000004 0.000042 16.517113
+68 1 1 916 -0.382934 2.543668 1.671447 0.000012 0.000142 16.902817
+70 1 0 919 0.273220 2.914037 1.975858 0.000007 0.000072 16.422591
+70 1 1 911 -0.380586 2.538534 2.661676 0.000018 0.000189 21.306309
+71 1 0 927 0.270648 4.495415 1.832304 0.000003 0.000023 15.326381
+71 1 1 911 -0.374629 3.509147 1.960478 0.000007 0.000067 14.023731
+72 0 0 922 -0.139030 4.265365 3.092647 0.000001 0.000008 36.803851
+72 0 1 937 0.507338 4.919313 2.656878 0.000005 0.000087 28.489847
+72 1 0 918 0.273990 4.384191 1.657099 0.000003 0.000025 16.250508
+72 1 1 901 -0.365903 4.259850 1.754957 0.000004 0.000068 12.246038
+73 0 0 909 -0.131142 4.841928 3.053060 0.000001 0.000013 35.932353
+73 0 1 939 0.512391 5.133209 2.178137 0.000004 0.000025 26.796286
+73 1 0 915 0.278769 2.556967 1.691021 0.000006 0.000050 15.318204
+74 0 0 919 -0.135500 5.774937 2.990444 0.000000 0.000004 38.680779
+74 0 1 919 0.517127 8.180404 2.131625 0.000001 0.000012 24.272923
+74 1 0 916 0.282418 1.150973 1.692552 0.000023 0.000215 15.138841
+76 0 0 916 -0.136047 5.623431 3.027347 0.000001 0.000015 40.599860
+76 0 1 913 0.537758 7.682777 2.005741 0.000001 0.000008 23.670972
+86 0 0 925 -0.141096 6.131959 3.056302 0.000001 0.000009 37.086914
+86 0 1 929 0.512093 8.391079 2.034693 0.000001 0.000008 26.888878
diff --git a/attic/dave/ptinfo.csv b/attic/dave/ptinfo.csv
new file mode 100644
index 0000000..f4c5ea9
--- /dev/null
+++ b/attic/dave/ptinfo.csv
@@ -0,0 +1,69 @@
+0 0 0 1024 0.041750 3.356344 1.828998 0.000002 0.000021 49.839622
+0 0 1 1024 0.109967 4.153035 1.883659 0.000002 0.000017 18.750043
+0 1 1 838 -0.207362 0.514121 2.011177 0.000005 0.000146 20.057562
+4 1 0 1024 0.131400 2.764364 2.038156 0.000003 0.000066 21.627449
+4 1 1 1024 -0.201195 2.843648 1.844738 0.000003 0.000079 20.542771
+6 0 0 1024 0.023004 4.443075 1.777077 0.000001 0.000026 47.120957
+6 0 1 1024 0.113830 5.225403 1.653571 0.000001 0.000022 20.887187
+6 1 0 1024 0.146652 2.742981 2.012739 0.000001 0.000012 21.375524
+6 1 1 1024 -0.211721 2.358521 1.862361 0.000001 0.000015 20.053232
+7 1 0 1024 0.140333 3.198140 1.997439 0.000001 0.000018 18.166517
+7 1 1 1024 -0.208156 2.908244 1.892947 0.000001 0.000013 17.755360
+8 0 0 1024 0.036998 5.118429 1.829670 0.000001 0.000012 39.822422
+8 0 1 1024 0.126802 6.585714 1.734635 0.000002 0.000021 20.020662
+9 0 0 1024 0.035700 4.496134 1.846496 0.000001 0.000012 45.663926
+9 0 1 1024 0.115987 5.774577 1.682445 0.000002 0.000027 19.873340
+10 0 0 1024 0.032992 4.960815 1.840030 0.000002 0.000034 49.867023
+10 0 1 1024 0.134889 6.200765 1.801494 0.000004 0.000056 19.108826
+15 0 0 1024 0.046206 3.663981 1.957251 0.000001 0.000022 51.132112
+15 0 1 1024 0.119199 4.899963 1.761027 0.000002 0.000060 24.645105
+16 1 0 1024 0.167758 2.818949 2.055596 0.000001 0.000010 19.765362
+16 1 1 1024 -0.210253 2.650065 1.684485 0.000001 0.000010 20.046716
+17 0 0 1024 0.008123 4.042155 1.907654 0.000001 0.000016 44.942365
+17 0 1 1024 0.119126 5.346334 1.616305 0.000002 0.000038 23.873406
+17 1 0 1024 0.160551 2.538859 2.078290 0.000001 0.000011 18.503004
+17 1 1 1024 -0.212818 1.963074 1.653989 0.000001 0.000010 20.818517
+18 1 0 1024 0.169252 1.834696 2.095149 0.000003 0.000073 20.457114
+18 1 1 1024 -0.202781 1.857198 1.804126 0.000003 0.000083 25.433970
+19 1 0 1024 0.177362 2.038411 2.536636 0.000008 0.000194 22.828018
+19 1 1 1024 -0.204779 2.259420 2.005833 0.000009 0.000221 27.081790
+23 0 0 1025 -0.010332 3.968150 1.862948 0.000004 0.000068 45.777934
+23 0 1 1023 0.128696 6.093495 1.773672 0.000004 0.004550 19300251.477888
+24 0 0 993 -0.006030 4.369734 1.921640 0.000005 0.000129 48.222013
+24 0 1 992 0.138082 6.460706 1.786190 0.000005 0.000155 22.781613
+27 0 1 1024 0.147109 2.936829 2.604852 0.000022 0.000474 28.721504
+29 0 0 1024 0.016187 5.032145 1.921979 0.000003 0.000047 47.194243
+29 0 1 1024 0.140979 6.596395 1.815706 0.000005 0.000090 24.794637
+30 0 0 1024 0.000282 4.738342 1.756708 0.000001 0.000040 47.044401
+30 0 1 1024 0.128872 6.677734 1.748380 0.000002 0.000039 19.083389
+31 0 0 1024 0.007667 5.235433 1.898046 0.000001 0.000019 47.785930
+31 0 1 1024 0.137390 6.697835 1.762878 0.000002 0.000024 20.161993
+32 0 0 1019 -0.221131 4.109073 1.687081 0.000001 0.000008 39.847161
+32 0 1 1022 0.145009 4.683627 1.672801 0.000001 0.000004 18.169256
+33 0 0 1020 -0.217002 4.494730 1.552900 0.000001 0.000006 38.840936
+33 0 1 1021 0.150320 4.659607 1.476978 0.000001 0.000006 20.903208
+34 0 0 1019 -0.220660 4.394218 1.499063 0.000001 0.000007 36.572525
+34 0 1 1020 0.155998 4.846773 1.572007 0.000001 0.000008 20.786276
+35 0 0 1020 -0.207471 4.282680 1.416071 0.000000 0.000006 37.591605
+35 0 1 1020 0.158539 3.864747 1.512890 0.000001 0.000005 19.809991
+36 0 0 1020 -0.213648 1.838133 1.606175 0.000001 0.000014 42.311387
+36 0 1 1020 0.151255 1.933946 1.611633 0.000001 0.000010 20.868507
+36 1 0 1017 0.357442 1.409087 2.339893 0.000001 0.000009 25.252360
+37 0 0 1019 -0.199851 4.357601 1.549965 0.000001 0.000006 41.234504
+37 0 1 1022 0.139227 4.483753 1.584095 0.000001 0.000008 19.873120
+38 0 0 1019 -0.200025 2.547739 1.691084 0.000001 0.000006 40.679205
+38 0 1 1020 0.153593 3.013930 1.747689 0.000001 0.000006 18.072496
+39 0 1 1022 0.147554 2.405292 1.636333 0.000001 0.000009 16.334833
+40 0 1 1022 0.134857 1.219056 1.504621 0.000004 0.000039 18.954468
+40 1 0 1020 0.341554 2.105331 2.496244 0.000000 0.000007 25.552542
+40 1 1 1020 -0.141616 2.311785 2.012586 0.000001 0.000007 22.408698
+41 1 0 1020 0.344930 2.430515 2.448566 0.000000 0.000003 27.764761
+41 1 1 1021 -0.149021 2.758386 1.892542 0.000000 0.000006 25.399428
+42 0 0 1020 -0.205661 1.525102 1.704018 0.000002 0.000045 38.874329
+42 0 1 1022 0.131522 1.181813 1.789474 0.000003 0.000023 19.790870
+42 1 0 1018 0.349915 3.181974 2.424394 0.000000 0.000005 27.068381
+42 1 1 1021 -0.147299 2.959639 1.892314 0.000000 0.000004 23.454554
+54 1 0 1019 0.346022 2.557082 2.295552 0.000000 0.000006 25.170448
+54 1 1 1020 -0.141488 2.866462 2.025173 0.000001 0.000006 25.737504
+55 1 0 1018 0.350800 1.716110 2.326650 0.000001 0.000013 26.234609
+55 1 1 1021 -0.145191 0.853330 1.730182 0.000001 0.000021 26.866658