#include #include #include void print_raw (const void *f, size_t n) { typedef unsigned char UChar; const UChar *pb; for (pb = (UChar*)f; pb != (UChar*)f + n; ++pb) printf ("%02x ", *pb); } #define print_raw(x) print_raw(&x, sizeof x) #define check(a, X, Y) do { \ __typeof__ (Y) x = X; \ __typeof__ (Y) y = Y; \ fesetround (FE_DOWNWARD); \ printf ("%-20s = { ", a); \ print_raw (x); \ printf ("}\n%-20s = { ", "expected"); \ print_raw (y); \ printf ("}\n"); \ if (signbit (x) != signbit (y)) \ printf ("failure: sign mismatch\n"); \ } while (0) int main () { #define CHECK(f, y) check (#f, f, y) CHECK (floorf (0.1f), 0.0f); CHECK (floor (0.1), 0.0); CHECK (floorl (0.1L), 0.0L); return 0; }