Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int magic_lt(int a, int b) {
- if ((a < 0) && (b < 0)) {
- return b < a;
- } else {
- return a < b;
- }
- }
- #define HUGE 100000.0
- #define TINY 0.0001
- #define ITERS 1000000
- int main() {
- int i;
- float a, b;
- for (i = 0; i < ITERS; i++) {
- a = (drand48() - 0.5) * HUGE;
- // три варианта, для сомневающихся
- b = (drand48() - 0.5) * HUGE; // очень разный порядок
- //b = a + (drand48() - 0.5) * TINY; // один порядок
- //b = -a + (drand48() - 0.5) * TINY; // один порядок, разный знак
- int aint = *(int*)&a;
- int bint = *(int*)&b;
- if (magic_lt(aint, bint) != (a < b)) {
- printf("wrong!\n");
- printf("%0.9f <-> %d\n", a, aint);
- printf("%0.9f <-> %d\n", b, bint);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement