Blame examples/float-lookup.c

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