Date: Fri, 7 May 1993 15:47 EST From: "Wonkoo Kim, EE, U. of Pittsburgh" Subject: gcc hangs: Problem is narrowed down to DBL_MAX problem. To: djgpp AT sun DOT soe DOT clarkson DOT EDU Hi, again. I tested with the short test*.c programs and I found that the defined constant DBL_MAX made the trouble. Making the DBL_MAX constant smaller than the value defined in , the gcc hanging problem goes away and no problem even for -O optimization. This is very strange to me. I showed the fine-tuned DBL_MAX value in the following sample program. This fine-tuned value may vary from system to system, because various math-coprocessors exists and some people use floating-point math emulation. If this is related to floating point problem, why did only my system hang? (since 486-25MHz is a common cpu/math unit.) Any comments? If I replace the fine tuned value into , is there any possible problems? (I don't care any small insignificant differences in output values.) ----- test3.c ---------------- #include #include #ifdef DBL_MAX #undef DBL_MAX #endif /* #define DBL_MAX 1.7976931348623167e+308 quoted from */ /* #define DBL_MAX 1.79769313486231577e+308 */ /* made gcc hang if >= */ #define DBL_MAX 1.79769313486231576e+308 /* gcc is okay with this */ double test (double x, double y) { if (y == 0.) return (23.6); if (x == 0.) return (DBL_MAX); return (10.*log10(y / x)); } -------- A small question: In this test3.c, y/x in log10() can possibly have big number greater than DBL_MAX. What happen in such situation(big y and small x)? y/x seems not just to be truncated to DBL_MAX in such cases before passing to log10(). I got "Inf" instead of DBL_MAX value when I printed the log10(y/x) value with "%g" format. (interesting. number becomes message string) (BTW, changing to return(10.*(log10(y) - log10(x))); is a solution, but only for log() function.) Thanks. Wonkoo.