GNU Octave
3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
liboctave
util
lo-ieee.h
Go to the documentation of this file.
1
/*
2
3
Copyright (C) 1996-2013 John W. Eaton
4
5
This file is part of Octave.
6
7
Octave is free software; you can redistribute it and/or modify it
8
under the terms of the GNU General Public License as published by the
9
Free Software Foundation; either version 3 of the License, or (at your
10
option) any later version.
11
12
Octave is distributed in the hope that it will be useful, but WITHOUT
13
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15
for more details.
16
17
You should have received a copy of the GNU General Public License
18
along with Octave; see the file COPYING. If not, see
19
<http://www.gnu.org/licenses/>.
20
21
*/
22
23
#if !defined (octave_lo_ieee_h)
24
#define octave_lo_ieee_h 1
25
26
#ifdef __cplusplus
27
extern
"C"
{
28
#endif
29
30
/* Octave's idea of infinity. */
31
extern
OCTAVE_API
double
octave_Inf
;
32
33
/* Octave's idea of a missing value. */
34
extern
OCTAVE_API
double
octave_NA
;
35
36
/* Octave's idea of not a number. */
37
extern
OCTAVE_API
double
octave_NaN
;
38
39
/* Octave's idea of infinity. */
40
extern
OCTAVE_API
float
octave_Float_Inf
;
41
42
/* Octave's idea of a missing value. */
43
extern
OCTAVE_API
float
octave_Float_NA
;
44
45
/* Octave's idea of not a number. */
46
extern
OCTAVE_API
float
octave_Float_NaN
;
47
48
/* FIXME -- this code assumes that a double has twice the
49
number of bits as an int */
50
51
extern
OCTAVE_API
int
lo_ieee_hw
;
52
extern
OCTAVE_API
int
lo_ieee_lw
;
53
54
typedef
union
55
{
56
double
value
;
57
unsigned
int
word[2];
58
}
lo_ieee_double
;
59
60
typedef
union
61
{
62
float
value
;
63
unsigned
int
word
;
64
}
lo_ieee_float
;
65
66
#define LO_IEEE_NA_HW_OLD 0x7ff00000
67
#define LO_IEEE_NA_LW_OLD 1954
68
#define LO_IEEE_NA_HW 0x7FF840F4
69
#define LO_IEEE_NA_LW 0x40000000
70
#define LO_IEEE_NA_FLOAT 0x7FC207A2
71
72
extern
OCTAVE_API
void
octave_ieee_init
(
void
);
73
74
extern
OCTAVE_API
int
__lo_ieee_isnan
(
double
x
);
75
extern
OCTAVE_API
int
__lo_ieee_finite
(
double
x
);
76
extern
OCTAVE_API
int
__lo_ieee_isinf
(
double
x
);
77
78
extern
OCTAVE_API
int
__lo_ieee_is_NA
(
double
);
79
extern
OCTAVE_API
int
__lo_ieee_is_old_NA
(
double
);
80
extern
OCTAVE_API
int
__lo_ieee_is_NaN_or_NA
(
double
)
GCC_ATTR_DEPRECATED
;
81
extern OCTAVE_API
double
__lo_ieee_replace_old_NA
(
double
);
82
83
extern OCTAVE_API
double
lo_ieee_inf_value
(
void
);
84
extern OCTAVE_API
double
lo_ieee_na_value
(
void
);
85
extern OCTAVE_API
double
lo_ieee_nan_value
(
void
);
86
87
extern OCTAVE_API
int
__lo_ieee_signbit
(
double
);
88
89
extern OCTAVE_API
int
__lo_ieee_float_isnan
(
float
x
);
90
extern OCTAVE_API
int
__lo_ieee_float_finite
(
float
x);
91
extern OCTAVE_API
int
__lo_ieee_float_isinf
(
float
x);
92
93
extern OCTAVE_API
int
__lo_ieee_float_is_NA
(
float
);
94
extern OCTAVE_API
int
__lo_ieee_float_is_NaN_or_NA
(
float
) GCC_ATTR_DEPRECATED;
95
96
extern OCTAVE_API
float
lo_ieee_float_inf_value
(
void
);
97
extern OCTAVE_API
float
lo_ieee_float_na_value
(
void
);
98
extern OCTAVE_API
float
lo_ieee_float_nan_value
(
void
);
99
100
extern OCTAVE_API
int
__lo_ieee_float_signbit
(
float
);
101
102
#ifdef __cplusplus
103
}
104
#endif
105
106
#define lo_ieee_isnan(x) (sizeof (x) == sizeof (float) ? \
107
__lo_ieee_float_isnan (x) : __lo_ieee_isnan (x))
108
#define lo_ieee_finite(x) (sizeof (x) == sizeof (float) ? \
109
__lo_ieee_float_finite (x) : __lo_ieee_finite (x))
110
#define lo_ieee_isinf(x) (sizeof (x) == sizeof (float) ? \
111
__lo_ieee_float_isinf (x) : __lo_ieee_isinf (x))
112
113
114
#define lo_ieee_is_NA(x) (sizeof (x) == sizeof (float) ? \
115
__lo_ieee_float_is_NA (x) : __lo_ieee_is_NA (x))
116
#define lo_ieee_is_NaN_or_NA(x) (sizeof (x) == sizeof (float) ? \
117
__lo_ieee_float_is_NaN_or_NA (x) : __lo_ieee_is_NaN_or_NA (x))
118
#define lo_ieee_signbit(x) (sizeof (x) == sizeof (float) ? \
119
__lo_ieee_float_signbit (x) : __lo_ieee_signbit (x))
120
121
#ifdef __cplusplus
122
123
template
<
typename
T>
124
struct
octave_numeric_limits
125
{
126
static
T NA (
void
) {
return
static_cast<
T
>
(0); }
127
};
128
129
template
<>
130
struct
octave_numeric_limits<
double
>
131
{
132
static
double
NA (
void
) {
return
octave_NA
; }
133
};
134
135
template
<>
136
struct
octave_numeric_limits<
float
>
137
{
138
static
float
NA (
void
) {
return
octave_Float_NA
; }
139
};
140
141
#endif
142
143
#endif
Generated on Mon Dec 30 2013 03:04:54 for GNU Octave by
1.8.1.2