close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 9 years ago

Last modified 9 years ago

#1872 new defect

Warnings con gsl_sf_hazard

Reported by: Pedro Gea Owned by: Víctor de Buen Remiro
Priority: normal Milestone: Mantainance
Component: Kernel Version: head
Severity: critical Keywords:
Cc:

Description

La función gsl_sf_hazard produce mensajes de warning cuando es llamada con valores muy negativos:

Real gsl_sf_hazard(-100);
Warning: [1] [GSL Error 15] underflow
At line 114 of file ..\..\specfunc\exp.c

Warning: [2] [GSL Error 15] gsl_sf_hazard_e(x, &result)
At line 463 of file ..\..\specfunc\erfc.c

En versiones anteriores de tol.3.2 (o en tol.3.1, etc.) no ocurría. Ahora ocurre tanto en tol-gnu como en tol-msvc.

Estos mensajes de advertencia afectan (por su frecuencia) a QltvRespModel (y con ello también a GrzLinModel). Véase tolp/OfficialTolArchiveNetwork/QltvRespModel/WgtProbit.tol método Hazard.

Change History (2)

comment:1 Changed 9 years ago by Víctor de Buen Remiro

Supongo que será un cambio en la propia GSL, y que ahora estaréis usando una nueva versión de la misma que da ese warning, o que antes estuvieran desactivados de alguna manera que desconozco.

Si se ha cambiado la versión hay unas https://www.tol-project.org/browser/tolp/trunk/tol/btol/bgsl/tolgsl_usrapi_real.leame.txt instrucciones a seguir, aunque no sé si tendrá algo que ver. La cosa es que si tocamos a mano los CPP entonces los cambios se perderían si queremos volver a correr el script que crea la API GSL-TOL. Tampoco sé si esto será necesario pues tampoco creo que metan muchas funciones nuevas a la GSL

En cualquier caso no tiene mucho sentido ese mensaje pues esta función tiende asintóticamente a cero cuando nos desplazamos en el eje de abscisas hacia menos infinito.

De hecho, en aritmética discreta de doble precisión, el valor es indistinguible de cero por debajo de -37.7

xhazard
-380
-37.90
-37.80
-37.70
-37.64.04414480935E-308
-37.51.72823373228E-306
-37.47.31198534551E-305
-37.33.0628462907E-303
-37.21.27020011383E-301
-37.15.21526219883E-300
-372.12000655152E-298

Podríamos poner un cortocircuito en la línea 3199 de tolgsl_usrapi_real.cpp para arreglarlo pero como ya he dicho podría perderse si se corre el script de regeneración.

Otra opción sería deshabilitar los mensajes de underflow en la función https://www.tol-project.org/browser/tolp/trunk/tol/btol/bgsl/tolgsl.cpp#L43 GslErrorHandler, pues yo diría que no suponen nunca ningún peligro

//--------------------------------------------------------------------
void GslErrorHandler (const char * reason,
                      const char * file,
                      int line,
                      int gsl_errno)
{
  Warning(BText("[GSL Error ")+gsl_errno+"] "+reason+"\n"
          "At line "+line+" of file "+file); 
}

comment:2 Changed 9 years ago by Pedro Gea

(In [6827]) Refs #1872
Mientras se controlan las advertencias de GSL se evita la llamada a gsl_sf_hazard por debajo de -37.6.

Note: See TracTickets for help on using tickets.