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 12 years ago

Closed 12 years ago

#1643 closed defect (fixed)

El desbordamiento de fechas corrompe algunas funciones

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

Description

Hay una advertencia que se encuentra cuando se hace un sucesor más allá de la fecha máxima considerada en TOL:

Warning: [] BTmsIntersection::Successor ha sido abortado porque se ha salido del rango de cálculo  operando entre las fechas [...]
Probablemente se trata de una expresión de conjunto temporal vacío o acotado.

como por ejemplo, al hacer:

Serie SubSer(CalInd(C, Yearly), TheEnd-2, TheEnd-1);

o

Date Succ(y2000, Yearly, 1000);

Sin embargo, la advertencia sólo se muestra una vez, y después de ellas algunas funciones se corrompen o dejan de funcionar correctamente. Por ejemplo:

Real SumS(CalVar(Weekly, Yearly), y2000, y2002); // -> 157
Date Succ(y2000, Yearly, 1000);
Real SumS(CalVar(Weekly, Yearly), y2000, y2002); // -> ?

Change History (5)

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

Resolution: remind
Status: newclosed

Se trata de un problema conocido e insoluble con el álgebra del tiempo implementado.

O se nos ocurre una forma de resolver simbólicamente si una expresión de conjunto temporal es finita o habrá que seguir usando reglas heurísticas y, aunque puede ser que con nuevas reglas se resuelvan estas expresiones concretas que pones aquí, siempre habrá casos extremos en los que tendremos casos de expresiones no vacías que darán este problema.

comment:2 Changed 12 years ago by Pedro Gea

Resolution: remind
Status: closedreopened

El problema no es el desbordamiento del sucesor sino que CalVar y otras funciones dejan de funcionar.

Si no se puede solucionar, habría que poner un error (no un warning) y tirar TOL.

comment:3 Changed 12 years ago by Víctor de Buen Remiro

Bueno, lo que dejan de funcionar realmente son los conjuntos temporales afectados, más concretamente los operadores sucesor y predecesor y sus derivados, lo cual acaba afectando a casi todo lo que tenga que ver con dicho conjunto temporal.

Cuando hay un desbordamiento el TimeSet se apunta internamente las fechas para las que ha ocurrido con el objeto de no dejar que vuelva a pasar lo mismo y no pierda
más tiempo haciendo ciclos larguísimos para volver a desbordarse una y otra vez en el mismo sitio. Por similar motivo no salen más mensajes tras el primer desbordamiento pues no ofrecen mayor información y sólo ralentizan el proceso.

Creo que se debe a que no estoy distinguiendo convenientemente los desbordamientos durante una operación sucesor de los casos durante el cálculo del predecesor, y, por algún motivo que aún no alcanzo a ver, se hace un lío con operaciones que sí debería poder hacer por estar en un rango adecuado, y se desentiende de ellas como si no se pudieran resolver dando lugar a comportamientos absurdos de las llamadas de funciones como CalVar que precisan los operadores sucesor y predecesor del TimeSet.

De hecho, si tras un desbordamiento del sucesor, se diera otro del predecesor sí debería volver a repetirse el mensaje de aviso pues el motivo ha de ser distinto forzosamente.

Veré qué es lo que puede estar pasando y lo de dar error en lugar de warning siempre estamos a tiempo de cambiarlo.

comment:4 Changed 12 years ago by Víctor de Buen Remiro

(In [5701]) Refs #1643

comment:5 Changed 12 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: reopenedclosed

(In [5704]) Fixes #1643 in tol 3.2

Note: See TracTickets for help on using tickets.