chiark / gitweb /
curveopt: symbolic: compiles
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Apr 2018 19:47:45 +0000 (20:47 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Apr 2018 19:47:45 +0000 (20:47 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
findcurve.c
symbolic.py

index 65c5672eb7753c5a117d741c2723fda43c2f7a5b..32050acde23644aa4bf675cf8a8cba4358f699ee 100644 (file)
@@ -2,6 +2,7 @@
  */
 
 #include <math.h>
+#include <string.h>
 
 #include <gsl/gsl_errno.h>
 #include <gsl/gsl_sf.h>
@@ -21,6 +22,7 @@ static inline double sinc(double x) {
   return gsl_sf_sinc(x / M_PI);
 }
 
+static int NP;
 static double *INPUT; /* dyanmic array, on main's stack */
 static double PREP[NPREP];
 
@@ -36,6 +38,7 @@ static double cb_Efunc(void *xp) {
   CALCULATE_F_G;
 
   double e = 0;
+  int P;
   for (P=0; P<NP-3; P++) {
     double P_cost;
     CALCULATE_COST;
@@ -48,8 +51,8 @@ static void cb_step(const gsl_rng *rng, void *xp, double step_size) {
   double *x = xp;
   int i;
   double step[NX];
-  gsl_ran_dir_nd(rng, N,step);
-  for (i=0; i<N; i++)
+  gsl_ran_dir_nd(rng, NX, step);
+  for (i=0; i<NX; i++)
     x[i] += step_size * step[i];
   //printf("\n cb_step %p %10.7f [", xp, step_size);
   //for (i=0; i<N; i++) printf(" %10.7f,", step[i]);
@@ -60,21 +63,17 @@ static double cb_metric(void *xp, void *yp) {
   const double *x=xp, *y=yp;
   int i;
   double s;
-  for (i=0, s=0; i<N; i++) {
+  for (i=0, s=0; i<NX; i++) {
     double d = x[i] - y[i];
     s += d*d;
   }
   return sqrt(s);
 }
 
-static void printcore(const double *x) {
+static void printcore(const double *X) {
   int i;
-  double F[N];
-  X_EXTRACT;
-  F_POPULATE;
   printf("[");
-  for (i=0; i<6; i++) printf(" %.18g,", x[i]);
-  for (i=0; i<6; i++) printf(" %.18g,", F[i]);
+  for (i=0; i<NX; i++) printf(" %.18g,", X[i]);
   printf(" ]\n");
 }
 
@@ -95,7 +94,7 @@ static double scan1double(void) {
   return v;
 }
 
-int main(int argc, const char *const argv) {
+int main(int argc, const char *const *argv) {
   double epsilon;
   int i;
 
index af5af8f1cbff32f3bd972f9f49976eab59761a16..a050b6a90918fce9bcb3b0945112d55f1c50140f 100644 (file)
@@ -64,8 +64,8 @@ def calculate():
   R = C + 0.5 * (C - D)
   QR = R - Q
   BC = C - B
-  cost_ABCD = (QR & QR) / (BC & BC)
   global cost_ABCD
+  cost_ABCD = (QR & QR) / (BC & BC)
   dbg('cost_ABCD')
   dprint(A)
 
@@ -156,26 +156,26 @@ def gen_point_references():
 
   gen_point_index_macro('E',  'INPUT', '3*0')
   gen_point_index_macro('F0', 'INPUT', '3*1')
-  gen_point_index_macro('G0', 'INPUT', '3*(N-2)')
-  gen_point_index_macro('H',  'INPUT', '3*(N-1)')
-  cprintraw(    '#define NINPUT       ( 3*(N-0) )')
+  gen_point_index_macro('G0', 'INPUT', '3*(NP-2)')
+  gen_point_index_macro('H',  'INPUT', '3*(NP-1)')
+  cprintraw(         '#define NINPUT  ( 3*(NP-0) )')
 
   gen_point_index_macro('En', 'PREP', '3*0')
   gen_point_index_macro('Hn', 'PREP', '3*1')
-  cprintraw(         '#define PREP_N (3*2)')
+  cprintraw(         '#define NPREP   (3*2)')
 
-  cprintraw('#define X_N_DIRECT 3*(N-4)')
+  cprintraw('#define NX_DIRECT 3*(NP-4)')
   cprint('#define POINT(PP) (')
-  cprint(' (PP) == 0   ? E :')
-  cprint(' (PP) == 1   ? F :')
-  cprint(' (PP) == N-2 ? G :')
-  cprint(' (PP) == N-1 ? H :')
+  cprint(' (PP) == 0    ? E :')
+  cprint(' (PP) == 1    ? F :')
+  cprint(' (PP) == NP-2 ? G :')
+  cprint(' (PP) == NP-1 ? H :')
   cprint(' &X[3*((PP)-2)]')
   cprintraw(')')
 
-  cprintraw('#define EFl X[ X_N_DIRECT + 0 ]')
-  cprintraw('#define GHl X[ X_N_DIRECT + 1 ]')
-  cprintraw('#define X_N  ( X_N_DIRECT + 2 )')
+  cprintraw('#define EFl X[ NX_DIRECT + 0 ]')
+  cprintraw('#define GHl X[ NX_DIRECT + 1 ]')
+  cprintraw('#define NX   ( NX_DIRECT + 2 )')
 
   for ai in range(0, len(abcd)):
     cprintraw('#define %s POINT(P%+d)' % (abcd[ai], ai))
@@ -185,7 +185,7 @@ def gen_point_references():
 
 def gen_prepare():
   cprint('#define PREPARE')
-  cprint('memcpy(X, &INPUT[3*2], sizeof(double) * X_N_DIRECT)')
+  cprint('memcpy(X, &INPUT[3*2], sizeof(double) * NX_DIRECT);')
   cassign_vector((F0 - E).normalize(), 'En', 'tmp_En')
   cassign_vector((G0 - H).normalize(), 'Hn', 'tmp_Hn')
   cprintraw('')