#if 1 void (...) printf = #0; float foo (float a, float b) { float c = a % b; return c; } float bar (float a, float b) { float c; b &= b; a &= a; c = a - ((a / b) & -1) * b; return c; } #endif float baz (float a, float b) { float c = (a + b) % (a - b); return c; } #if 1 float main (void) { printf ("foo: 5 %% 3: %f\n", foo (5, 3)); printf ("bar: 5 %% 3: %f\n", bar (5, 3)); printf ("foo: -5 %% 3: %f\n", foo (-5, 3)); printf ("bar: -5 %% 3: %f\n", bar (-5, 3)); printf ("foo: 5 %% -3: %f\n", foo (5, -3)); printf ("bar: 5 %% -3: %f\n", bar (5, -3)); printf ("foo: -5 %% -3: %f\n", foo (-5, -3)); printf ("bar: -5 %% -3: %f\n", bar (-5, -3)); return 0; } #endif