diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-02-08 02:04:10 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-02-08 02:04:10 +0000 |
commit | 7cccb9c2531088502492d92e8632159653de6290 (patch) | |
tree | 7e34bb6d1956204501b511c2532fd552cf407df2 /docs | |
parent | 49173d980edd36861fdb00830b8b63d9297327e6 (diff) |
nextafterf: trying to correct FP exception handling
Diffstat (limited to 'docs')
-rw-r--r-- | docs/probe_math_exception.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/docs/probe_math_exception.c b/docs/probe_math_exception.c new file mode 100644 index 000000000..dbeccc5cc --- /dev/null +++ b/docs/probe_math_exception.c @@ -0,0 +1,41 @@ +/* Small test program for probing how various math functions + * with specific operands set floating point exceptions + */ + +#define _ISOC99_SOURCE 1 +#define _GNU_SOURCE 1 + +#include <math.h> +#include <fenv.h> +#include <stdio.h> + +int main(int argc, char **argv) +{ + float infF = HUGE_VALF * 2; + + feclearexcept(FE_ALL_EXCEPT); + +// printf("%.40e\n", 1.0 / 0.0); // FE_DIVBYZERO +// printf("%.40e\n", nextafterf(HUGE_VALF, infF)); // no exceptions in glibc 2.4 + +#define PREX(ex) do { if (fetestexcept(ex)) printf(#ex); } while(0) +#ifdef FE_INEXACT + PREX(FE_INEXACT); +#endif +#ifdef FE_DIVBYZERO + PREX(FE_DIVBYZERO); +#endif +#ifdef FE_UNDERFLOW + PREX(FE_UNDERFLOW); +#endif +#ifdef FE_OVERFLOW + PREX(FE_OVERFLOW); +#endif +#ifdef FE_INVALID + PREX(FE_INVALID); +#endif + if (fetestexcept(FE_ALL_EXCEPT)) + printf("\n"); + printf("done\n"); + return 0; +} |