/*
Check whether NaN ** 0 == 1.
*/

#ifdef __MINGW32__
#ifndef __USE_MINGW_ANSI_STDIO
#define __USE_MINGW_ANSI_STDIO 1
#endif
#endif

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
 long double rop, op, check;
 long l;
 unsigned long ul;

 rop = strtold(argv[1], NULL);
 op  = strtold(argv[2], NULL);
 l   = strtol (argv[2], NULL, 10);
 ul  = strtoul(argv[2], NULL, 10);


 if(rop == rop) printf("rop should be 'not a number' but rop == rop\n");

 check = powl(rop, op);
 if(check == 1.0L) printf("1.0L\n");
 else {
   if(check != check) printf("NaN\n");
   else printf("%Le\n", check);
 }

 check = powl(rop, (long double)l);
 if(check == 1.0L) printf("1.0L\n");
 else {
   if(check != check) printf("NaN\n");
   else printf("%Le\n", check);
 }

 check = powl(rop, (long double)ul);
 if(check == 1.0L) printf("1.0L\n");
 else {
   if(check != check) printf("NaN\n");
   else printf("%Le\n", check);
 }

 ul = (unsigned long)sizeof(long double);
 printf("size of long double: %u\n", ul);

 return 0;

}