00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined (octave_liboctave_ieee_h)
00024 #define octave_liboctave_ieee_h 1
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030
00031 extern double octave_Inf;
00032
00033
00034 extern double octave_NA;
00035
00036
00037 extern double octave_NaN;
00038
00039 extern int lo_ieee_hw;
00040 extern int lo_ieee_lw;
00041
00042 typedef union
00043 {
00044 double value;
00045 unsigned int word[2];
00046 } lo_ieee_double;
00047
00048 #define LO_IEEE_NA_HW 0x7ff00000
00049 #define LO_IEEE_NA_LW 1954
00050
00051 extern void octave_ieee_init (void);
00052
00053 #if defined (SCO)
00054 extern int isnan (double);
00055 extern int isinf (double);
00056 #endif
00057
00058 extern int lo_ieee_isnan (double x);
00059 extern int lo_ieee_finite (double x);
00060 extern int lo_ieee_isinf (double x);
00061
00062 extern int lo_ieee_is_NA (double);
00063 extern int lo_ieee_is_NaN_or_NA (double);
00064
00065 extern double lo_ieee_inf_value (void);
00066 extern double lo_ieee_na_value (void);
00067 extern double lo_ieee_nan_value (void);
00068
00069
00070
00071
00072
00073 #if defined (signbit)
00074 #define lo_ieee_signbit(x) signbit (x)
00075 #elif defined (HAVE_SIGNBIT)
00076 #if defined (__MINGW32__)
00077 extern int signbit (double);
00078 #endif
00079 #define lo_ieee_signbit(x) (x < 0 || signbit (x))
00080 #elif defined (copysign)
00081 #define lo_ieee_signbit(x) (copysign (1.0, x) < 0)
00082 #elif defined (HAVE_COPYSIGN)
00083 #define lo_ieee_signbit(x) (x < 0 || copysign (1.0, x) < 0)
00084 #else
00085 #define lo_ieee_signbit(x) 0
00086 #endif
00087
00088 #ifdef __cplusplus
00089 }
00090 #endif
00091
00092 #endif
00093
00094
00095
00096
00097
00098