/* * Computing machine epsilon. On Linux/i386 with * * gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-113) * * these give 1.0842e-19 with -O1, -O2, and -O3, and 2.22045e-16 with -O0 */ #include #ifdef USE_STORE #define ONE store[0] #define EPS store[1] #define NEWEPS store[2] #define ONE_PLUS_NEWEPS store[3] double store[4]; int main() { ONE = 1.0; EPS = 1.0; NEWEPS = EPS / 2.0; ONE_PLUS_NEWEPS = ONE + NEWEPS; while (ONE_PLUS_NEWEPS != ONE) { EPS = NEWEPS; NEWEPS = EPS / 2.0; ONE_PLUS_NEWEPS = ONE + NEWEPS; } printf("Epsilon = %g\n", EPS); return 0; } #else int main() { double one = 1.0; double eps = 1.0; double neweps, one_plus_neweps; neweps = eps / 2.0; one_plus_neweps = one + neweps; while (one_plus_neweps != one) { eps = neweps; neweps = eps / 2.0; one_plus_neweps = one + neweps; } printf("epsilon = %g\n", eps); return 0; } #endif