File: fenv.3

package info (click to toggle)
manpages-es 1.55-9
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 7,468 kB
  • ctags: 6
  • sloc: sh: 1,629; makefile: 64
file content (248 lines) | stat: -rw-r--r-- 8,498 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
.\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
.\" USA.
.\"
.\" 2000-08-14 added GNU additions from Andreas Jaeger
.\" 2000-12-05 some changes inspired by acahalan's remarks
.\"
.\" Traducido por Miguel Pérez Ibars <mpi79470@alu.um.es> el 11-julio-2004
.\"
.TH FENV 3  "12 agosto 2000" "Página de Manual de Linux" "Manual del Programador de Linux"
.SH NOMBRE
feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag,
fetestexcept, fegetenv, fegetround, feholdexcept, fesetround,
fesetenv, feupdateenv - manejo de redondeo y excepciones en coma flotante C99
.SH SINOPSIS
.nf
.B #include <fenv.h>
.sp
.BI "void feclearexcept(int " excepts );
.br
.BI "void fegetexceptflag(fexcept_t *" flagp ", int " excepts );
.br
.BI "void feraiseexcept(int " excepts );
.br
.BI "void fesetexceptflag(const fexcept_t *" flagp ", int " excepts );
.br
.BI "int fetestexcept(int " excepts );
.sp
.B "int fegetround(void);"
.br
.BI "int fesetround(int " rounding_mode );
.sp
.BI "void fegetenv(fenv_t *" envp );
.br
.BI "int feholdexcept(fenv_t *" envp );
.br
.BI "void fesetenv(const fenv_t *" envp );
.br
.BI "void feupdateenv(const fenv_t *" envp );
.fi
.SH DESCRIPCIÓN
Estas once funciones fueron definidas dentro de C99 y describen el manejo
del redondeo y de las excepciones (desbordamiento por arriba, dividir-por-cero etc.) en coma flotante.
.SS Excepciones
La excepción «dividir por cero» (\fIDivideByZero\fR) ocurre cuando una
operación sobre números finitos produce infinito como resultado exacto.
.LP
La excepción «desbordamiento por arriba» (\fIOverflow\fR) ocurre
cuando un resultado tiene que ser representado
como un número en coma flotante, pero su valor absoluto es (mucho) más grande
que el número en coma flotante más grande (finito) que se puede representar.
.LP
La excepción «desbordamiento por abajo» (\fIUnderflow\fR) ocurre
cuando un resultado tiene que ser representado como
un número en coma flotante, pero su valor absoluto es más pequeño que el número positivo
en coma flotante normalizado más pequeño (y se perdería mucha precisión
si se representara como un número desnormalizado).
.LP
The exception «inexacto» (\fIInexact\fR) se produce cuando el
resultado redondeado de una operación no es igual al resultado de
precisión infinita. Puede ocurrir siempre que se produzca un
desbordamiento por arriba o por abajo.
.LP
La excepción «inválido» (\fIInvalid\fR) ocurre cuando no hay un resultado definido
para una operación, como por ejemplo 0/0 o infinito - infinito o sqrt(-1).
.SS "Manejo de excepciones"
Las excepciones se representan de dos maneras: como un bit individual
(excepción presente/ausente), que se sitúa dentro de un entero de alguna manera definida 
por la implementación, y también como una estructura opaca que puede contener más información
sobre la excepción (tal vez la dirección dentro del código donde se produjo).
.LP
Cada una de las macros
.BR FE_DIVBYZERO ,
.BR FE_INEXACT ,
.BR FE_INVALID ,
.BR FE_OVERFLOW ,
.BR FE_UNDERFLOW
se define cuando la implementación soporta el manejo
de la correspondiente excepción, definiendose también
el bit correspondiente, de forma que se pueda llamar
a las funciones de manejo de excepciones usando p.e. el argumento entero
.BR FE_OVERFLOW | FE_UNDERFLOW .
Otras excepciones pueden estar soportadas. La macro
.B FE_ALL_EXCEPT
está formada mediante un OR lógico con todos los bits que se corresponden con excepciones soportadas.
.PP
La función
.B feclearexcept
limpia las excepciones soportadas representadas por los bits de su argumento.
.LP
La función
.B fegetexceptflag
almacena una representación del estado de las banderas de excepción
representadas por el argumento
.I excepts
en el objeto opaco
.RI * flagp .
.LP
La función
.B feraiseexcept
lanza las excepciones soportadas representadas por los bits en
.IR excepts .
.LP
La función
.B fesetexceptflag
configura por completo la situación de las excepciones representadas por
.I excepts
según el valor dado por
.RI * flagp .
Este valor debe haber sido obtenido mediante una llamada previa a
.B fegetexceptflag
con un último argumento que tuviera todos los bits en
.IR excepts .
.LP
La función
.B fetestexcept
devuelve una palabra en la que los bits activos son aquellos que
estaban activos en el argumento
.I excepts
y para los que la excepción correspondiente está activa actualmente.
.SS Redondeo
Cada una de las macros
.BR FE_DOWNWARD ,
.BR FE_TONEAREST ,
.BR FE_TOWARDZERO ,
.BR FE_UPWARD
se define cuando la implementación soporta el obtener y establecer
la correspondiente dirección de redondeo.
.LP
La función
.B fegetround
devuelve la macro correspondiente al modo actual de redondeo.
.LP
La función
.B fesetround
fija el modo de redondeo según especifique su argumento
y devuelve cero cuando tiene éxito.
.SS "Entorno de coma flotante"
El entorno de coma flotante por completo, incluyendo
los modos de control y las banderas de estado, puede ser manejado
como un objeto opaco, de tipo
.IR fenv_t .
El entorno por defecto se denota por
.B FE_DFL_ENV
(de tipo
.IR "const fenv_t *" ).
El entorno por defecto determina la configuración del entorno al
inicio de la ejecución de un programa y, según establece el ISO C,
equivale a redondear al más cercano, tener todas las expeciones
desactivadas y usar un modo de no-parada (continuar en excepciones).
.LP
La función
.B fegetenv
guarda el entorno de coma flotante actual en el objeto
.RI * envp .
.LP
La función
.B feholdexcept
hace lo mismo y a continuación limpia todas las banderas de excepción
y establece un modo de no-parada (continuar en excepciones), 
si ésto es posible. Devuelve cero cuando tiene éxito.
.LP
La función
.B fesetenv
restablece el entorno de coma flotante según el objeto
.RI * envp .
Debemos asegurarnos de que este objeto es válido, es decir, de que es
el resultado de una llamada a
.B fegetenv
o
.B feholdexcept
o de que es igual a
.BR FE_DFL_ENV .
Ésta llamada no provoca excepciones.
.LP
La función
.B feupdateenv
instala el entorno de coma flotante representado por el objeto
.RI * envp ,
pero no desactiva las excepciones actualmente lanzadas. Tras
llamar a esta función, las excepciones lanzadas vendrán dadas por el
resultado de un O\-lógico entre aquellas previamente activas y las que
haya en
.RI * envp .
Como antes, debemos asegurarnos de que el objeto
.RI * envp
es válido.

.SH "DETALLES DE GNU"
Si es posible, la Biblioteca GNU C define una macro
.B FE_NOMASK_ENV
que representa un entorno donde toda excepción lanzada provoca
una trampa. Puede preguntar por esta macro usando
.BR #ifdef .
Solamente está definida si
.B _GNU_SOURCE
está definida.
El estándar C99 no define una manera para activar bits individuales 
en la máscara de coma flotante, p.e. para atrapar según banderas específicas.
glibc 2.2 soportará las funciones
.I feenableexcept
y
.I fedisableexcept
para instalar trampas individuales de coma flotante y
.I fegetexcept
para consultar el estado.
.sp
.nf
.BI "int feenableexcept (int " excepts );
.br
.BI "int fedisableexcept (int " excepts );
.br
.BI "int fegetexcept (void);"
.br
.fi
.LP
Las funciones
.B feenableexcept
y
.B fedisableexcept
habilitan (deshabilitan) trampas para cada excepción representada por
.I excepts
y devuelven el conjunto previo de excepciones habilitadas cuando tienen éxito
y \-1 en caso contrario.
La función
.B fegetexcept
devuelve el conjunto de todas las excepciones habilitadas actualmente.

.SH "CONFORME A"
IEC 60559 (IEC 559:1989), ANSI/IEEE 854, ISO C99 (ISO/IEC 9899:1999).