[dadc52]: src / octclip / libgeoc / geocnan.h  Maximize  Restore  History

Download this file

234 lines (230 with data), 12.1 kB

  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
/* -*- coding: utf-8 -*- */
/**
\defgroup geocnan Módulo GEOCNAN
\ingroup geom matriz gshhs
\brief En este módulo se reúnen constantes y funciones para el trabajo con
valores Not-a-Number.
@{
\file geocnan.h
\brief Declaración de constantes y funciones para el trabajo con valores
Not-a-Number.
\author José Luis García Pallero, jgpallero@gmail.com
\date 26 de mayo de 2011
\version 1.0
\section Licencia Licencia
Copyright (c) 2010-2011, José Luis García Pallero. All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
- Neither the name of the copyright holders nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/******************************************************************************/
/******************************************************************************/
#ifndef _GEOCNAN_H_
#define _GEOCNAN_H_
/******************************************************************************/
/******************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include"libgeoc/errores.h"
/******************************************************************************/
/******************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/******************************************************************************/
/******************************************************************************/
/**
\def GEOC_NAN
\brief Constante \em Not-a-Number (\em NaN). Se define como \em 0.0/0.0.
\date 21 de diciembre de 2010: Creación de la constante.
*/
#define GEOC_NAN (0.0/0.0)
/******************************************************************************/
/******************************************************************************/
/**
\def GEOC_NAN_TXT
\brief Constante \em Not-a-Number (\em NaN), como cadena de texto.
\date 22 de septiembre de 2011: Creación de la constante.
*/
#define GEOC_NAN_TXT "NaN"
/******************************************************************************/
/******************************************************************************/
/**
\def GEOC_NAN_LON_FORM_NUM_SIMPLE
\brief Longitud de una cadena de texto auxiliar para el cálculo de la longitud
de una cadena de formato numérico simple.
\date 22 de septiembre de 2011: Creación de la constante.
*/
#define GEOC_NAN_LON_FORM_NUM_SIMPLE 100
/******************************************************************************/
/******************************************************************************/
/**
\brief Devuelve el número que representa el valor \em Not-a-Number (\em NaN),
que se define como el resultado de la evaluación de la operación
\em 0.0/0.0.
\return Valor NaN.
\note Esta función devuelve el valor almacenado en la constante #GEOC_NAN.
\date 21 de diciembre de 2010: Creación de la función.
\date 24 de mayo de 2011: Ahora la función devuelve el valor absoluto de
#GEOC_NAN, calculado con la función <tt>fabs()</tt> de C estándar. Se ha
hecho así porque, a veces, al imprimir un valor normal de #GEOC_NAN, éste
aparecía con un signo negativo delante.
\date 22 de septiembre de 2011: Lo del <tt>fabs()</tt> no funciona. Parece que
los problemas en la impresión dependen del compilador y los flags de
optimización utilizados. No obstante, se mantiene el uso de la función
<tt>fabs()</tt> en el código.
\todo Esta función todavía no está probada.
*/
double GeocNan(void);
/******************************************************************************/
/******************************************************************************/
/**
\brief Comprueba si un número es \em Not-a-Number (\em NaN).
\param[in] valor Un número.
\return Dos posibilidades:
- 0: El número pasado no es NaN.
- Distinto de 0: El número pasado sí es NaN.
\note Esta función ha sido adaptada de LAPACK 3.2.1, disnan.f,
(http://www.netlib.org/lapack).
\date 21 de diciembre de 2010: Creación de la función.
\todo Esta función todavía no está probada.
*/
int EsGeocNan(const double valor);
/******************************************************************************/
/******************************************************************************/
/**
\brief Busca valores #GEOC_NAN es un vector de datos.
\param[in] datos Vector de trabajo.
\param[in] nDatos Número de elementos que contiene el vector \em datos.
\param[in] incDatos Posiciones de separación entre los elementos del vector
\em datos. Este argumento siempre ha de ser un número positivo.
\param[out] nNan Número de valores #GEOC_NAN encontrados, que es el número de
elementos del vector de salida.
\return Varias posibilidades:
- Si todo ha ido bien, vector que contiene las posiciones en el vector
original donde se almacena el valor #GEOC_NAN.
- NULL: Pueden haber ocurrido dos cosas:
- Si \em nNan vale 0, en los datos de entrada no hay ningún valor
#GEOC_NAN.
- Si \em nNan es mayor que 0, ha ocurrido un error interno de
asignación de memoria.
\note Esta función no comprueba si el número de elementos del vector \em datos
es congruente con los valores pasados en \em nDatos e \em incDatos.
\note Las posiciones de los elementos #GEOC_NAN encontradas se refieren al
número de elementos \em nDatos del vector de trabajo. Para encontrar la
posición real en memoria es necesario tener en cuenta la variable
\em incDatos.
\date 26 de mayo de 2011: Creación de la función.
\todo Esta función no está probada.
*/
size_t* PosGeocNanEnVector(const double* datos,
const size_t nDatos,
const size_t incDatos,
size_t* nNan);
/******************************************************************************/
/******************************************************************************/
/**
\brief Calcula el número de carácteres que ocupa un valor numérico imprimido con
determinado formato.
\param[in] formato Cadena de formato para imprimir \b *UN \b ÚNICO* valor
numérico (de cualquier tipo).
\return Número de carácteres que ocupa un valor numérico imprimido según el
formato pasado.
\note Esta función no comprueba internamente si la cadena de formato es
correcta.
\note \em formato no puede dar lugar a un texto impreso de más de
#GEOC_NAN_LON_FORM_NUM_SIMPLE carácteres.
\date 22 de septiembre de 2011: Creación de la función.
\todo Esta función todavía no está probada.
*/
size_t LonFormatoNumSimple(const char formato[]);
/******************************************************************************/
/******************************************************************************/
/**
\brief Convierte una cadena de formato para imprimir un \b *ÚNICO* número en una
cadena para imprimir texto con el mismo ancho que el que tendría de haber
sido imprimida como número.
\param[in] formatoNum Cadena de formato para imprimir \b *UN \b ÚNICO* valor
numérico (de cualquier tipo).
\param[out] formatoTexto Cadena de texto que almacenará la cadena de formato
para la impresión en modo texto.
\note Esta función no comprueba internamente si la cadena de formato numérico es
correcta.
\note \em formatoNum no puede dar lugar a un texto impreso de más de
#GEOC_NAN_LON_FORM_NUM_SIMPLE carácteres.
\note Esta función asume que \em formatoTexto tiene espacio suficiente para
almacenar la cadena de salida.
\note Si \em formatoNum contiene al final carácteres de retorno de carro y salto
de línea, estos no son tenidos en cuenta en la creación de la cadena de
salida (no son tenidos en cuenta en el sentido de que no se añaden al
formato de salida, pero el espacio que ocupan sí se computa).
\date 22 de septiembre de 2011: Creación de la función.
\todo Esta función todavía no está probada.
*/
void FormatoNumFormatoTexto(const char formatoNum[],
char formatoTexto[]);
/******************************************************************************/
/******************************************************************************/
/**
\brief Imprime valores Not-a-Number en modo texto (#GEOC_NAN_TXT) es un fichero.
\param[in] idFich Identificador del fichero de trabajo, abierto para escribir.
\param[in] nNan Número de veces que se ha de imprimir el valor #GEOC_NAN_TXT,
una a continuación de otra.
\param[in] formato Cadena de formato para la impresión de cada valor
#GEOC_NAN_TXT.
\param[in] retCarro Identificador para añadir un retorno de carro y cambio de
línea al final de la impresión de datos, independientemente del valor
pasado en el argumento \em formato. Dos posibilidades:
- 0: No se imprime retorno de carro y cambio de línea al final.
- Distinto de 0: Sí se imprime retorno de carro y cambio de línea al
final.
\note Esta función no comprueba internamente si el fichero de entrada está
abierto correctamente.
\note Esta función no comprueba internamente si la cadena de formato es
correcta.
\note Si se ha indicado que se imprima salto de línea y retorno de carro al
final, este se imprime aunque \em nNan valga 0.
\date 22 de septiembre de 2011: Creación de la función.
\todo Esta función no está probada.
*/
void ImprimeGeocNanTexto(FILE* idFich,
const size_t nNan,
const char formato[],
const int retCarro);
/******************************************************************************/
/******************************************************************************/
#ifdef __cplusplus
}
#endif
/******************************************************************************/
/******************************************************************************/
#endif
/******************************************************************************/
/******************************************************************************/
/** @} */
/******************************************************************************/
/******************************************************************************/
/* kate: encoding utf-8; end-of-line unix; syntax c; indent-mode cstyle; */
/* kate: replace-tabs on; space-indent on; tab-indents off; indent-width 4; */
/* kate: line-numbers on; folding-markers on; remove-trailing-space on; */
/* kate: backspace-indents on; show-tabs on; */
/* kate: word-wrap-column 80; word-wrap-marker-color #D2D2D2; word-wrap off; */

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks