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

Closed 13 years ago

Last modified 13 years ago

#1488 closed defect (fixed)

Error usando la función Range de TimeSets

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

Description

El código:

TimeSet ts = Range(D(1)*M(1), -5, 2, C);
Date Succ(y1900, ts, 1);

no funciona en TolBase v3.1 y da la siguiente advertencia:

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

Change History (10)

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

Resolution: fixed
Status: newclosed

Con la versión oficial actual v3.1 p007 2012-03-15 19:31:11 i686-win yo no consigo reproducir ese problema aunque es muy posible que haya estado ese error en alguna versión anterior.

comment:2 Changed 13 years ago by Pedro Gea

Resolution: fixed
Status: closedreopened

Justo con esa versión: "v3.1 p007 2012-03-15 19:31:11 i686-win" es con la que me ocurre.

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

Yo acabo de volver a bajar el TOLBase 3.1 actual por si acaso y me funciona correctamente.

Escribo este código TOL

WriteLn("Version = "<<Version);
TimeSet ts = Range(D(1)*M(1), -5, 2, C);
Date dte = Succ(y1900, ts, 1);
WriteLn("dte = "<<dte);

y obtengo esto

Version = v3.1 p007 2012-03-15 19:31:11 i686-win
dte = y1900m01d02

No me sale ningún warning y devuelve la fecha correcta.

comment:4 Changed 13 years ago by Pedro Gea

Quizá así:

Date DefFirst := y2011;
Date DefLast := y2012;
TimeSet ts = Range(D(1)*M(1), -5, 2, C);
Date Succ(y1900, ts, 1);

se vuelve reproducible.
Aunque no esé que valor tienen las fechas por defecto en el comportamiento de funciones como Range y Succ.

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

Bien, así ya se reproduce.

comment:6 Changed 13 years ago by Jorge

Acabo de probarlo con la versión

Text Version
"v3.1 p008 2012-03-19 13:12:11 +0100 CET i686-linux-gnu"

y el error se manifiesta:

18:08:26 TOL> Date Succ(y1900, ts, 1);
<W>
Warning: [3] BTmsIntersection::Predecessor has been aborted because it has fall out of calculation range  operating between dates y1900m01d06,y1900m01d06]
Probably this is an expression of empty time set.</W>
TheEnd

probaré con la versión oficial p007

comment:7 Changed 13 years ago by Víctor de Buen Remiro

Las fechas por defecto se utilizan para decidir que un conjunto temporal es vacío.

No hay ninguna forma analítica de saber si un conjunto temporal es vacío o no.

Haría falta una herramienta de cálculo simbólico capaz de manejar con entidades abstractas que no hemos sabido ni tan siquiera imaginar hasta ahora.

Si intentas efectuar operaciones de sucesión o predecesión dentro de un conjunto que es vacío entonces puedes entrar en un ciclo infinito, aunque en la práctica se pararía siempre en TheBegin o TheEnd. Aún así resultaría demasiado lento por lo que se emplean reglas heurísticas para decidir si se aborta el ciclo de búsqueda dando por hecho que el conjunto es vacío. En esas reglas se tienen en cuenta las fechas por defecto y es posible que si estás operando muy lejos de ellas te encuentres con falsos negativos como éste.

Recientemente se ha podido cambiar algo que afecte a eses reglas y es lo que habrá que mirar.

comment:8 Changed 13 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: reopenedclosed

(In [4408]) Fixes #1488

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

(In [4409]) Fixes #1488

comment:10 Changed 13 years ago by Víctor de Buen Remiro

Persiguiendo el error #1462 hice cambios que me parecían sensatos y que aceleraban alguna cosa, pero que por lo que se ve dan este tipo de problemas con mayor probabilidad.

Note: See TracTickets for help on using tickets.