1 /*
2  $Id$
3  */
4 
5 #include "typesf2c.h"
6 #include <stdio.h>
7 #if defined(SOLARIS)
8 #define WORKS_FOR 1
9 #endif
10 
11 #if defined(CRAY) || defined(WIN32)
12 #define is_this_val_okay_ IS_THIS_VAL_OKAY
13 #endif
14 
15 /* */
16 
17 #if defined(WORKS_FOR)
18 #include <ieeefp.h>
19 #endif
20 
is_this_val_okay_(double * value)21 int FATR is_this_val_okay_(double *value)
22 {
23 #if defined(WORKS_FOR)
24 /*
25  -1 unknown
26   0 zero
27   1 nan
28   2 infinity
29   3 nonzero
30  */
31     double val;
32     fpclass_t fp_res;
33     int ret_val;
34 
35     val = *value;
36     fp_res = fpclass (val);
37 
38     if (fp_res == FP_NZERO || fp_res == FP_PZERO)
39 	{
40 	    ret_val = 0;
41 	}
42     else if (fp_res == FP_SNAN || fp_res == FP_QNAN)
43 	{
44 	    ret_val = 1;
45 	}
46     else if (fp_res == FP_NINF || fp_res == FP_PINF)
47 	{
48 	    ret_val = 2;
49 	}
50     else if (fp_res == FP_NDENORM || fp_res == FP_PDENORM || fp_res == FP_NNORM || fp_res == FP_PNORM)
51 	{
52 	    ret_val = 3;
53 	}
54     else
55 	{
56 	    ret_val = -1;
57 	}
58     return ret_val;
59 #else
60     return (int) 3;
61 #endif
62 }
63