/* Copyright (C) 1997, 1998, 2000, 2006 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Geoffrey Keating <Geoff.Keating@anu.edu.au>, 1997.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

#include <stdio.h>
#include <math.h>
#include <gmp.h>
#include <string.h>
#include <limits.h>
#include <assert.h>

#define PRINT_ERRORS 0

#define N 0
#define N2 20
#define FRAC (32 * 4)

#define mpbpl (CHAR_BIT * sizeof (mp_limb_t))
#define SZ (FRAC / mpbpl + 1)
typedef mp_limb_t mp1[SZ], mp2[SZ * 2];

/* These strings have exactly 100 hex digits in them.  */
static const char sin1[101] =
"d76aa47848677020c6e9e909c50f3c3289e511132f518b4def"
"b6ca5fd6c649bdfb0bd9ff1edcd4577655b5826a3d3b50c264";
static const char cos1[101] =
"8a51407da8345c91c2466d976871bd29a2373a894f96c3b7f2"
"300240b760e6fa96a94430a52d0e9e43f3450e3b8ff99bc934";
static const char hexdig[] = "0123456789abcdef";

static void
print_mpn_hex (const mp_limb_t *x, unsigned size)
{
   char value[size + 1];
   unsigned i;
   const unsigned final = (size * 4 > SZ * mpbpl) ? SZ * mpbpl / 4 : size;

   memset (value, '0', size);

   for (i = 0; i < final ; i++)
     value[size-1-i] = hexdig[x[i * 4 / mpbpl] >> (i * 4) % mpbpl & 0xf];

   value[size] = '\0';
   fputs (value, stdout);
}

static void
sincosx_mpn (mp1 si, mp1 co, mp1 xx, mp1 ix)
{
   int i;
   mp2 s[4], c[4];
   mp1 tmp, x;
   mp_limb_t chk, round;

   if (ix == NULL)
     {
       memset (si, 0, sizeof (mp1));
       memset (co, 0, sizeof (mp1));
       co[SZ-1] = 1;
       memcpy (x, xx, sizeof (mp1));
     }
   else
      mpn_sub_n (x, xx, ix, SZ);

   for (i = 0; i < 1 << N; i++)
     {
#define add_shift_mulh(d,x,s1,s2,sh,n) \
       /* d = (n ? -1 : 1) * (s1 + (s2>>sh)) * x / (1>>N); */		      \
      do { 								      \
	 if (s2 != NULL) {						      \
	    if (sh > 0) {						      \
	       assert (sh < mpbpl);					      \
	       mpn_lshift (tmp, s1, SZ, sh);				      \
	       chk = (n ? mpn_sub_n : mpn_add_n)(tmp,tmp,s2+FRAC/mpbpl,SZ);   \
	    } else							      \
	       chk = (n ? mpn_sub_n : mpn_add_n)(tmp,s1,s2+FRAC/mpbpl,SZ);    \
	    /* assert(chk == 0); */					      \
	    mpn_mul_n(d,tmp,x,SZ);					      \
	 } else 							      \
	    mpn_mul_n(d,s1,x,SZ);					      \
	 /* assert(d[SZ*2-1] == 0); */					      \
	 assert(N+sh < mpbpl);						      \
	 if (N+sh > 0) mpn_rshift(d,d,2*SZ,N+sh);			      \
      } while(0)
#define summ(d,ss,s,n) \
      /* d = ss +/- (s[0]+2*s[1]+2*s[2]+s[3])/6; */			      \
      do { 								      \
	 chk = mpn_add_n(tmp,s[1]+FRAC/mpbpl,s[2]+FRAC/mpbpl,SZ);	      \
	 mpn_lshift(tmp,tmp,SZ,1);					      \
	 chk |= mpn_add_n(tmp,tmp,s[0]+FRAC/mpbpl,SZ);			      \
	 chk |= mpn_add_n(tmp,tmp,s[3]+FRAC/mpbpl,SZ);			      \
	 round = mpn_divmod_1(tmp,tmp,SZ,6);				      \
	 /* chk |= mpn_add_1(tmp,tmp,SZ, (round > 3) ); */		      \
         chk |= (n ? mpn_sub_n : mpn_add_n)(d,ss,tmp,SZ);		      \
	 /* assert(chk == 0); */					      \
      } while (0)

      add_shift_mulh (s[0], x, co, NULL, 0, 0); /* s0 = h * c; */
      add_shift_mulh (c[0], x, si, NULL, 0, 0); /* c0 = h * s; */
      add_shift_mulh (s[1], x, co, c[0], 1, 1); /* s1 = h * (c - c0/2); */
      add_shift_mulh (c[1], x, si, s[0], 1, 0); /* c1 = h * (s + s0/2); */
      add_shift_mulh (s[2], x, co, c[1], 1, 1); /* s2 = h * (c - c1/2); */
      add_shift_mulh (c[2], x, si, s[1], 1, 0); /* c2 = h * (s + s1/2); */
      add_shift_mulh (s[3], x, co, c[2], 0, 1); /* s3 = h * (c - c2); */
      add_shift_mulh (c[3], x, si, s[2], 0, 0); /* c3 = h * (s + s2); */
      summ (si, si, s, 0);        /* s = s + (s0+2*s1+2*s2+s3)/6; */
      summ (co, co, c, 1);        /* c = c - (c0+2*c1+2*c2+c3)/6; */
   }
#undef add_shift_mulh
#undef summ
}

static int
mpn_bitsize (const mp_limb_t *SRC_PTR, mp_size_t SIZE)
{
   int i, j;
   for (i = SIZE - 1; i > 0; i--)
     if (SRC_PTR[i] != 0)
       break;
   for (j = mpbpl - 1; j >= 0; j--)
     if ((SRC_PTR[i] & (mp_limb_t)1 << j) != 0)
       break;

   return i * mpbpl + j;
}

int
main (void)
{
  mp1 si, co, x, ox, xt, s2, c2, s3, c3;
  int i;
  int sin_errors = 0, cos_errors = 0;
  int sin_failures = 0, cos_failures = 0;
  mp1 sin_maxerror, cos_maxerror;
  int sin_maxerror_s = 0, cos_maxerror_s = 0;
  const double sf = pow (2, mpbpl);

  /* assert(mpbpl == mp_bits_per_limb);  */
  assert(FRAC / mpbpl * mpbpl == FRAC);

  memset (sin_maxerror, 0, sizeof (mp1));
  memset (cos_maxerror, 0, sizeof (mp1));
  memset (xt, 0, sizeof (mp1));
  xt[(FRAC - N2) / mpbpl] = (mp_limb_t)1 << (FRAC - N2) % mpbpl;

  for (i = 0; i < 1 << N2; i++)
    {
      int s2s, s3s, c2s, c3s, j;
      double ds2,dc2;

      mpn_mul_1 (x, xt, SZ, i);
      sincosx_mpn (si, co, x, i == 0 ? NULL : ox);
      memcpy (ox, x, sizeof (mp1));
      ds2 = sin (i / (double) (1 << N2));
      dc2 = cos (i / (double) (1 << N2));
      for (j = SZ-1; j >= 0; j--)
	{
	  s2[j] = (mp_limb_t) ds2;
	  ds2 = (ds2 - s2[j]) * sf;
	  c2[j] = (mp_limb_t) dc2;
	  dc2 = (dc2 - c2[j]) * sf;
	}
      if (mpn_cmp (si, s2, SZ) >= 0)
	mpn_sub_n (s3, si, s2, SZ);
      else
	mpn_sub_n (s3, s2, si, SZ);
      if (mpn_cmp (co, c2, SZ) >= 0)
	mpn_sub_n (c3, co, c2, SZ);
      else
	mpn_sub_n (c3, c2, co, SZ);

      s2s = mpn_bitsize (s2, SZ);
      s3s = mpn_bitsize (s3, SZ);
      c2s = mpn_bitsize (c2, SZ);
      c3s = mpn_bitsize (c3, SZ);
      if ((s3s >= 0 && s2s - s3s < 54)
	  || (c3s >= 0 && c2s - c3s < 54)
	  || 0)
	{
#if PRINT_ERRORS
	  printf ("%06x ", i * (0x100000 / (1 << N2)));
	  print_mpn_hex(si, (FRAC / 4) + 1);
	  putchar (' ');
	  print_mpn_hex (co, (FRAC / 4) + 1);
	  putchar ('\n');
	  fputs ("       ", stdout);
	  print_mpn_hex (s2, (FRAC / 4) + 1);
	  putchar (' ');
	  print_mpn_hex (c2, (FRAC / 4) + 1);
	  putchar ('\n');
	  printf (" %c%c    ",
		  s3s >= 0 && s2s-s3s < 54 ? s2s - s3s == 53 ? 'e' : 'F' : 'P',
		  c3s >= 0 && c2s-c3s < 54 ? c2s - c3s == 53 ? 'e' : 'F' : 'P');
	  print_mpn_hex (s3, (FRAC / 4) + 1);
	  putchar (' ');
	  print_mpn_hex (c3, (FRAC / 4) + 1);
	  putchar ('\n');
#endif
	  sin_errors += s2s - s3s == 53;
	  cos_errors += c2s - c3s == 53;
	  sin_failures += s2s - s3s < 53;
	  cos_failures += c2s - c3s < 53;
	}
      if (s3s >= sin_maxerror_s
	  && mpn_cmp (s3, sin_maxerror, SZ) > 0)
	{
	  memcpy (sin_maxerror, s3, sizeof (mp1));
	  sin_maxerror_s = s3s;
	}
      if (c3s >= cos_maxerror_s
	  && mpn_cmp (c3, cos_maxerror, SZ) > 0)
	{
	  memcpy (cos_maxerror, c3, sizeof (mp1));
	  cos_maxerror_s = c3s;
	}
    }

   /* Check Range-Kutta against precomputed values of sin(1) and cos(1).  */
   memset (x, 0, sizeof (mp1));
   x[FRAC / mpbpl] = (mp_limb_t)1 << FRAC % mpbpl;
   sincosx_mpn (si, co, x, ox);

   memset (s2, 0, sizeof (mp1));
   memset (c2, 0, sizeof (mp1));
   for (i = 0; i < 100 && i < FRAC / 4; i++)
     {
       s2[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (strchr (hexdig, sin1[i])
						       - hexdig)
 					  << (FRAC - i * 4 - 4) % mpbpl);
       c2[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (strchr (hexdig, cos1[i])
						       - hexdig)
					  << (FRAC - i * 4 - 4) % mpbpl);
     }

   if (mpn_cmp (si, s2, SZ) >= 0)
     mpn_sub_n (s3, si, s2, SZ);
   else
     mpn_sub_n (s3, s2, si, SZ);
   if (mpn_cmp (co, c2, SZ) >= 0)
      mpn_sub_n (c3, co, c2, SZ);
   else
     mpn_sub_n (c3, c2, co, SZ);

   printf ("sin:\n");
   printf ("%d failures; %d errors; error rate %0.2f%%\n",
	   sin_failures, sin_errors, sin_errors * 100.0 / (double) (1 << N2));
   fputs ("maximum error:   ", stdout);
   print_mpn_hex (sin_maxerror, (FRAC / 4) + 1);
   fputs ("\nerror in sin(1): ", stdout);
   print_mpn_hex (s3, (FRAC / 4) + 1);

   fputs ("\n\ncos:\n", stdout);
   printf ("%d failures; %d errors; error rate %0.2f%%\n",
	   cos_failures, cos_errors, cos_errors * 100.0 / (double) (1 << N2));
   fputs ("maximum error:   ", stdout);
   print_mpn_hex (cos_maxerror, (FRAC / 4) + 1);
   fputs ("\nerror in cos(1): ", stdout);
   print_mpn_hex (c3, (FRAC / 4) + 1);
   putchar ('\n');

   return (sin_failures == 0 && cos_failures == 0) ? 0 : 1;
}
