[C con Clase] Manejar señales de punto flotante

Javier P jpsianes en yahoo.es
Vie Mayo 25 11:40:43 CEST 2007


Hola.

A ver si aquí hay alguien que me pueda ayudar con un tema peliagudo.

Estoy ampliando un progama en C++ que realiza ciertos cálculos. Yo para los míos necesito hacer una análisis de componentes principales (PCA), y para ello tiro de las bibliotecas TNT y JAMA para C.
La cosa es que al pedir los eigenvectores, muy ocasionalmente me devuelve una matriz con bastantes valores nan, creo yo que debido a la precisión, ya que salen valores muy bajos y a lo mejor los redondea cero y eso da problemas, pero no estoy muy seguro.
Según tengo entendido este comportamiento del C se tiene cuando no se activan las excepciones ante errores de punto flotante.
El programa que estoy extendiendo inicializa la FPU de esta manera:
int setfpu()
  {
    fpu_control_t t;

    _FPU_GETCW(fpu_current_state);
    t=(fpu_current_state&0xfcff) | 0x0000;
    _FPU_SETCW(t);
    return 0;
  }
Pero no encuentro por ahí el siginificado de la máscara de estas macros, aunque me imagino que desactiva las señales para que funcione más rápido, (algo primordial para la aplicación que realiza muchos cálculos).

No tengo muy claro como debo tratar este problema:

- ¿Debería mirar todos los valores de la matriz en busca de algún nan?. Las matrices son grandísimas.
- ¿Debería intentar activar las señales (aunque no se como) para capturarlas? Parece ser que esto hace que el coprocesador vaya muy lento ya que no trabaja en pipeline. Tampoco se realmente que señal debo capturar y como tratarla (imagino que será la SIGFPE).

Mi programa hace estos cálculos en un bucle for. Mi primer pensamiento sería activar las señales y que la función manejadora reste 1 al contador, volviendo a generar unos cálculos nuevos, ya que estos se basan en un número inicial aleatorio.

¿Podría alguien con conocimientos de estos temas a bajo nivel iluminarme un poco con este asunto?

Muchas gracias.




       
____________________________________________________________________________________
¡Descubre una nueva forma de obtener respuestas a tus preguntas!
Entra en Yahoo! Respuestas.
http://es.answers.yahoo.com/info/welcome
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070525/e5e3a8a7/attachment.html>


Más información sobre la lista de distribución Cconclase