Ticket #1872 (new defect)

Opened 3 years ago

Last modified 3 years ago

Warnings con gsl_sf_hazard

Reported by: pgea Owned by: vdebuen
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

Changed 3 years ago by vdebuen

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 [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 [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); 
}

Changed 3 years ago by pgea

(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.