#include <stdio.h>
#include <math.h>
int
main (void)
{
#ifdef __GNUC__
  long long int i;
#else
  _int64 i;
#endif
  long double d;

  i = 0xdeadbeef;
  i = (i << 32) | i;

  printf ("given:    i=0x%lx%lx\n", (long) (i >> 32),
	  (unsigned long) (i & 0xffffffff));
  printf ("now do i-=1 via long double\n");
  d = i;
  d -= 1.0;
  i = d;
  printf ("expected: i=0xdeadbeefdeadbeee\n");
  printf ("got:      i=0x%lx%lx\n", (long) (i >> 32),
	  (unsigned long) (i & 0xffffffff));


  printf ("\nnow setting extended precision explicitely\n");
  _control87 (_PC_64, _MCW_PC);

  i = 0xdeadbeef;
  i = (i << 32) | i;

  printf ("given:    i=0x%lx%lx\n", (long) (i >> 32),
	  (unsigned long) (i & 0xffffffff));
  printf ("now do i-=1 via long double\n");
  d = i;
  d -= 1.0;
  i = d;
  printf ("expected: i=0xdeadbeefdeadbeee\n");
  printf ("got:      i=0x%lx%lx\n", (long) (i >> 32),
	  (unsigned long) (i & 0xffffffff));
}
