Ejemplo n.º 1
0
/* Compute both f and df together. */
void
my_fdf (const gsl_vector *x, void *params,
        double *f, gsl_vector *df)
{
    *f = my_f(x, params);
    my_df(x, params, df);
}
Ejemplo n.º 2
0
int main()
{
  // side-effect in ?:
  glob=0;  
  result=glob?1:my_f();  
  assert(result==0);
  
  // side-effect in ||
  glob=0;
  result=glob||my_f();
  assert(result==0);

  // side-effect deep down
  glob=0;
  result=glob||(0+my_f());
  assert(result==0);
  
  // another variant of this
  int r, c=1;  
  r=c?(c=0, 10):20;
  assert(c==0 && r==10);
}
Ejemplo n.º 3
0
#include<iostream>

int my_f(int);

//const int c4 = my_f(4);
int c4 = my_f(4);
//const int c5 = my_f(5);
//const int c5 = my_f(5);
Ejemplo n.º 4
0
int main()
{
  #ifdef _WIN32
  
  // Visual Studio won't even parse most of these
  
  #else

  // a side effect inside an array type
  x=1;
  int array[++x];
  assert(x==2);
  assert(sizeof(array)==sizeof(int)*2);

  // same with typedef
  x=1;
  typedef int array_type[++x];
  assert(x==2);
  assert(sizeof(array_type)==sizeof(int)*2);

  // a side effect inside an initializer
  x=1;
  int local=++x, local2=x;
  assert(x==2);
  assert(local==2);
  assert(local2==2);

  // a side effect inside a function argument list
  x=1;
  int return_value=my_f(++x);
  assert(x==2);
  assert(return_value==2);
  
  // using a pointer
  x=1;
  int *p=&x;
  y=++(*p);
  assert(y==2);
  assert(x==2);
  
  // in a struct
  x=1;
  struct struct_type
  {
    int a[++x];
    int b;
  };
  assert(x==2);
  assert(sizeof(struct struct_type)==sizeof(int)*2+sizeof(int));

  // this is evaluated when the type is defined, not later
  x++;
  assert(sizeof(struct struct_type)==sizeof(int)*2+sizeof(int));
  
  // only happens once
  x=1;
  y=1;
  struct other_struct
  {
    int a[++x];
  } v1[y++], v2[y++], v3[y++];
  assert(x==2);
  assert(y==4);
  assert(sizeof(v1)==sizeof(int)*2*1);
  assert(sizeof(v2)==sizeof(int)*2*2);
  assert(sizeof(v3)==sizeof(int)*2*3);
  
  // inside a typecast (struct)
  x=1;
  (struct { int a[x++]; } *)0;
  assert(x==2);
  
  // inside a typecast (function pointer)
  x=1;
  (int (*)(int a[x++]))0; // This is ignored by gcc! Haha!
  assert(x==1);
  
  // inside sizeof
  x=1;
  assert(sizeof(struct { int a[x++]; })==sizeof(int));
  assert(x==2);
  
  // multi-dimensional
  x=y=1;
  typedef int my_array1[x][y];
  x++;
  assert(sizeof(my_array1)==sizeof(int));
  
  #endif
}
Ejemplo n.º 5
0
int m2()
{
  return my_f();
}
Ejemplo n.º 6
0
void minimd(density_t * ndft){
  int  status;
  int i;
  double stepmin, minimum, g_initial;
  char * output_string;
  gsl_vector *ss;
  const gsl_multimin_fminimizer_type *T;
  gsl_multimin_fminimizer *s;
  gsl_multimin_function my_func;
  size_t iter;
  params_gsl_multimin_function_t params;

  switch(gradient_free_mode){

  case SIMPLEX :

    output_string = (char *) malloc(25*sizeof(char));

    params.nDFT = density_get_val(ndft);
    my_func.n = ipf.npar;
    my_func.f = my_f;
    my_func.params = (void *) (&params);

    /* Initial step sizes */
    ss = gsl_vector_alloc (ipf.npar);
    gsl_vector_set_all(ss, 0.1);

    /* We use the Simplex algorithm from thee GNU Scientific Library (GSL)
       in its optimized version nmsimplex2 */
    T = gsl_multimin_fminimizer_nmsimplex2;

    messages_basic("\n\n\nStarting the optimization.\n\n\n");


    g_initial = my_f(ipf.gamma, &params);
    if(g_initial < epsilon_gvalue){
      if(myid == 0) printf("The value of G for the starting gamma is %.12lg,\n", g_initial);
      if(myid == 0) printf("which is already below the requested threshold of %.12lg\n", epsilon_gvalue);
      parallel_end(EXIT_SUCCESS);
    }
    if(myid == 0) printf("  Starting from gamma =  ");
    if(myid == 0) {for(i = 0; i < ipf.npar; i++) printf ("%.5f ", gsl_vector_get (ipf.gamma, i));}
    if(myid == 0) printf("\n  G(gamma) = %.12lg\n", g_initial);

    /* Initialization of the minimizer s for the function
       my_func starting at the x point */
    messages_basic("\n\nInitialization of the minimizer.\n\n\n");
    s = gsl_multimin_fminimizer_alloc (T, ipf.npar);
    gsl_multimin_fminimizer_set (s, &my_func, ipf.gamma, ss);


    minimum = g_initial;
    iter = 0;
    do
      {
      iter++;
      if(myid == 0) printf("  Iter = %d\n", (int)iter);
      if(myid == 0) printf("    gamma =  ");
      if(myid == 0) {for(i = 0; i < ipf.npar; i++) printf ("%.5f ", gsl_vector_get (gsl_multimin_fminimizer_x(s), i));}
      if(myid == 0) printf("\n    starting G(gamma) = %15.10lg\n", minimum);
      /* We make an iteration of the minimizer s */
      status = gsl_multimin_fminimizer_iterate (s);
      minimum = gsl_multimin_fminimizer_minimum(s);

      if (status){
        if(myid == 0) printf("  Breaking. Reason: %s\n", gsl_strerror(status));
        break;
      }

      if(myid == 0) printf("    G(gamma) = %15.10f\n", minimum);

      stepmin = gsl_multimin_fminimizer_size (s);
      status = gsl_multimin_test_size (stepmin, 1e-2);

    }
    while (status == GSL_CONTINUE && iter < 100);

    if(myid == 0) printf("\n\nFinished optimization. status = %d (%s)\n", status, gsl_strerror(status));
    if(myid == 0) printf("  Final gamma =  ");
    if(myid == 0) {for(i = 0; i < ipf.npar; i++) printf ("%.5f ", gsl_vector_get (gsl_multimin_fminimizer_x(s), i));}
    if(myid == 0) printf("\n  With value: G(gamma) = %.12lg\n\n", gsl_multimin_fminimizer_minimum(s));

    gsl_vector_memcpy(ipf.gamma, gsl_multimin_fminimizer_x(s));
    sprintf(output_string, "pot");
    ipf_write(ipf, ipf_ref, output_string);
    gsl_multimin_fminimizer_free (s);
    fflush(stdout);

    gsl_vector_free(ss);

    break;

  case GENETIC_ALGORITHM :

    output_string = (char *) malloc(75*sizeof(char));

    sprintf(output_string, "python ga.py %f %f %f %f %f %f %d %d %d",
            grid.l, grid.step, extpot.alpha, extpot.Lmin, extpot.Lmax,
            extpot.delta, extpot.npotex, ipf.npar, ipf.poten_selector);

    system(output_string);
    free(output_string);

    break;
  }
}
Ejemplo n.º 7
0
#include<iostream>
int g =11;
//extern const int c4;
//extern const int c5;
int my_f(int c){
  int res = c*g;
  g = g*2;
  return res;
}

const int c1 = 1;
const int c2 = my_f(2);
const int c3 = my_f(3);
//extern const int c4;
extern int c4;


int main(){
std::cout<<"c1="<<c1<<"\n";
std::cout<<"c2="<<c2<<"\n";
std::cout<<"c3="<<c3<<"\n";
std::cout<<"c4="<<c4<<"\n";
return 0;
}