// Test the various SINT-TO-FP and UINT-TO-FP conversions. #include int tests[] = { 0x80000000, -123456792, -10, -2, -1, 0, 1, 2, 10, 123456792, 0x7FFFFF80 }; int main() { unsigned i; // byte boundary tests for (i = 0; i < 64; ++i) { printf("%d %f, %f, %f, %f\n", i, (double)(signed char)(i << 2), // i8 (double)(signed short)(i << 10), // i16 (double)(signed int)(i << 26), // i32 (double)(signed long long)((long long)i << 58ULL)); // i64 printf("%d %f, %f, %f, %f\n", i, (double)(unsigned char)(i << 2), // i8 (double)(unsigned short)(i << 10), // i16 (double)(unsigned int)(i << 26), // i32 (double)(unsigned long long)((unsigned long long)i << 58ULL)); // i64 } // edge case tests for (i = 0; i < (sizeof(tests) / sizeof(int)); i++) { printf("%d %f, %f, %f, %f\n", i, (double)(unsigned)tests[i], (double)( signed)tests[i], (float) tests[i], (float) ( signed)tests[i]); } return 0; }