1 #include <stdio.h> 2 #include <math.h> 3 4 int main(); 5 int main2(); 6 int main3(); 7 int main4(); 8 9 int main() { 10 printf("+inf:\n"); 11 float fx = (float)INFINITY; unsigned int *fxi = (unsigned int*)&fx; 12 double dx = (double)INFINITY; long unsigned long int *dxi = (long unsigned long int*)&dx; 13 long double ldx = (long double)INFINITY; long unsigned long int *ldxi1 = (long unsigned long int*)&ldx; long unsigned long int *ldxi2 = &(ldxi1[1]); 14 printf("\t\tf d ld\n"); 15 printf("correct:\t%x %x %x\n", isinf(fx), isinf(dx), isinf(ldx)); 16 printf("as floats:\t%x %x %x\n", isinf(*(float*)fxi), isinf(*(float*)dxi), isinf(*(float*)ldxi1)); 17 printf("as double:\t%x %x %x\n", isinf(*(double*)fxi), isinf(*(double*)dxi), isinf(*(double*)ldxi1)); 18 printf("as long double:\t%x %x %x\n", isinf(*(long double*)fxi), isinf(*(long double*)dxi), isinf(*(long double*)ldxi1)); 19 printf("sizes ?4 8 12?:\t%d %d %d\n", (int)sizeof(fx), (int)sizeof(dx), (int)sizeof(ldx)); 20 printf("sizes:\t%d %d %d\n", (int)sizeof(*fxi), (int)sizeof(*dxi), (int)sizeof(*ldxi1)*2); 21 printf("bit repr:\n f: %x\n d: %llx\n ld: %llx%llx\n", *fxi, *dxi, (0xFFFF)&*ldxi2, *ldxi1); 22 printf("\n"); 23 main2(); 24 return 0; 25 } 26 27 int main2() { 28 printf("-inf:\n"); 29 float fx = (float)-INFINITY; unsigned int *fxi = (unsigned int*)&fx; 30 double dx = (double)-INFINITY; long unsigned long int *dxi = (long unsigned long int*)&dx; 31 long double ldx = (long double)-INFINITY; long unsigned long int *ldxi1 = (long unsigned long int*)&ldx; long unsigned long int *ldxi2 = &(ldxi1[1]); 32 printf("\t\tf d ld\n"); 33 printf("correct:\t%x %x %x\n", isinf(fx), isinf(dx), isinf(ldx)); 34 printf("as floats:\t%x %x %x\n", isinf(*(float*)fxi), isinf(*(float*)dxi), isinf(*(float*)ldxi1)); 35 printf("as double:\t%x %x %x\n", isinf(*(double*)fxi), isinf(*(double*)dxi), isinf(*(double*)ldxi1)); 36 printf("as long double:\t%x %x %x\n", isinf(*(long double*)fxi), isinf(*(long double*)dxi), isinf(*(long double*)ldxi1)); 37 printf("sizes ?4 8 12?:\t%d %d %d\n", (int)sizeof(fx), (int)sizeof(dx), (int)sizeof(ldx)); 38 printf("bit repr:\n f: %x\n d: %llx\n ld: %llx%llx\n", *fxi, *dxi, (0xFFFF)&*ldxi2, *ldxi1); 39 printf("\n"); 40 main3(); 41 return 0; 42 } 43 44 int main3() { 45 printf("+NaN:\n"); 46 float fx = (float)NAN; unsigned int *fxi = (unsigned int*)&fx; 47 double dx = (double)NAN; long unsigned long int *dxi = (long unsigned long int*)&dx; 48 long double ldx = (long double)NAN; long unsigned long int *ldxi1 = (long unsigned long int*)&ldx; long unsigned long int *ldxi2 = &(ldxi1[1]); 49 printf("\t\tf d ld\n"); 50 printf("correct:\t%x %x %x\n", isnan(fx), isnan(dx), isnan(ldx)); 51 printf("as floats:\t%x %x %x\n", isnan(*(float*)fxi), isnan(*(float*)dxi), isnan(*(float*)ldxi1)); 52 printf("as double:\t%x %x %x\n", isnan(*(double*)fxi), isnan(*(double*)dxi), isnan(*(double*)ldxi1)); 53 printf("as long double:\t%x %x %x\n", isnan(*(long double*)fxi), isnan(*(long double*)dxi), isnan(*(long double*)ldxi1)); 54 printf("sizes ?4 8 12?:\t%d %d %d\n", (int)sizeof(fx), (int)sizeof(dx), (int)sizeof(ldx)); 55 printf("sizes:\t%d %d %d\n", (int)sizeof(*fxi), (int)sizeof(*dxi), (int)sizeof(*ldxi1)*2); 56 printf("bit repr:\n f: %x\n d: %llx\n ld: %llx%llx\n", *fxi, *dxi, (0xFFFF)&*ldxi2, *ldxi1); 57 printf("\n"); 58 main4(); 59 return 0; 60 } 61 62 int main4() { 63 printf("-NaN:\n"); 64 float fx = (float)-NAN; unsigned int *fxi = (unsigned int*)&fx; 65 double dx = (double)-NAN; long unsigned long int *dxi = (long unsigned long int*)&dx; 66 long double ldx = (long double)-NAN; long unsigned long int *ldxi1 = (long unsigned long int*)&ldx; long unsigned long int *ldxi2 = &(ldxi1[1]); 67 printf("\t\tf d ld\n"); 68 printf("correct:\t%x %x %x\n", isnan(fx), isnan(dx), isnan(ldx)); 69 printf("as floats:\t%x %x %x\n", isnan(*(float*)fxi), isnan(*(float*)dxi), isnan(*(float*)ldxi1)); 70 printf("as double:\t%x %x %x\n", isnan(*(double*)fxi), isnan(*(double*)dxi), isnan(*(double*)ldxi1)); 71 printf("as long double:\t%x %x %x\n", isnan(*(long double*)fxi), isnan(*(long double*)dxi), isnan(*(long double*)ldxi1)); 72 printf("sizes ?4 8 12?:\t%d %d %d\n", (int)sizeof(fx), (int)sizeof(dx), (int)sizeof(ldx)); 73 printf("bit repr:\n f: %x\n d: %llx\n ld: %llx%llx\n", *fxi, *dxi, (0xFFFF)&*ldxi2, *ldxi1); 74 printf("\n"); 75 return 0; 76 } 77