Blame examples/float-lookup.c

Packit bc1512
#include <glib/gstdio.h>
Packit bc1512
#include <gegl.h>
Packit bc1512
#include <gegl-plugin.h>
Packit bc1512
#include <math.h>
Packit bc1512
Packit bc1512
static gfloat wrapped_sqrt (gfloat   in,
Packit bc1512
                            gpointer data) /* we could have used the user data */
Packit bc1512
{
Packit bc1512
  return sqrt (in);
Packit bc1512
}
Packit bc1512
Packit bc1512
static gfloat passthrough (gfloat in, gpointer data)
Packit bc1512
{
Packit bc1512
  return in;
Packit bc1512
}
Packit bc1512
Packit bc1512
glong gegl_ticks (void);
Packit bc1512
Packit bc1512
#define ITERATIONS 10
Packit bc1512
#define SAMPLES   10000000
Packit bc1512
Packit bc1512
gint main (int argc, gchar **argv)
Packit bc1512
{
Packit bc1512
  gint   i,j = 0;
Packit bc1512
  gfloat val;
Packit bc1512
  gfloat foo;
Packit bc1512
  gdouble sum = 0;
Packit bc1512
  gint    count=0;
Packit bc1512
  GeglLookup *lookup;
Packit bc1512
  gint ticks;
Packit bc1512
  gfloat *rand = g_malloc (SAMPLES * sizeof (gfloat));
Packit bc1512
  
Packit bc1512
  for (i=0;i
Packit bc1512
    {
Packit bc1512
      rand[i]=g_random_double ();
Packit bc1512
    }
Packit bc1512
Packit bc1512
  lookup = gegl_lookup_new (wrapped_sqrt, NULL);
Packit bc1512
  ticks = gegl_ticks ();
Packit bc1512
  for (i=0;i
Packit bc1512
    for (j=0;j
Packit bc1512
      foo = gegl_lookup (lookup, rand[j]);
Packit bc1512
  ticks = gegl_ticks ()-ticks;
Packit bc1512
  g_print ("First run:  %i\n", ticks);
Packit bc1512
Packit bc1512
  ticks = gegl_ticks ();
Packit bc1512
  for (i=0;i
Packit bc1512
    for (j=0;j
Packit bc1512
      foo = gegl_lookup (lookup, rand[j]);
Packit bc1512
  ticks = gegl_ticks ()-ticks;
Packit bc1512
  g_print ("Second run: %i\n", ticks);
Packit bc1512
Packit bc1512
  ticks = gegl_ticks ();
Packit bc1512
  for (i=0;i
Packit bc1512
    for (j=0;j
Packit bc1512
      foo = sqrt (rand[j]);
Packit bc1512
  ticks = gegl_ticks ()-ticks;
Packit bc1512
  g_print ("Just sqrt: %i\n", ticks);
Packit bc1512
  gegl_lookup_free (lookup);
Packit bc1512
Packit bc1512
  lookup = gegl_lookup_new (passthrough, NULL);
Packit bc1512
  for (val = 0.0, sum=0.0, count=0; val < 1.0; val+=0.000001, count++)
Packit bc1512
    sum += fabs (val-gegl_lookup (lookup, val));
Packit bc1512
  g_printf ("Average error in range 0.0-1.0: %f\n", sum/count);
Packit bc1512
  foo = sqrt (val);
Packit bc1512
  gegl_lookup_free (lookup);
Packit bc1512
Packit bc1512
  g_free (rand);
Packit bc1512
Packit bc1512
  if (foo)
Packit bc1512
    return 0;
Packit bc1512
  return 0;
Packit bc1512
}