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

Closed 15 years ago

#784 closed defect (fixed)

Range: Inadecuate result

Reported by: pgea@… Owned by: Víctor de Buen Remiro
Priority: highest Milestone:
Component: Kernel Version:
Severity: critical Keywords:
Cc:

Description

La función Range(a,b,d) que devuelve un conjunto de números en un intervalo (a,b) separados por una distancia d, tiene un comportamiento inesperado cuando a>b.

El error surge cuando hacemos una llamada del tipo:

Set Range(1,0,1);
>> [[ 1, 0 ]]

que nos devuelve dos números cuando no esperaríamos ninguno.

Al parecer Range hace algo parecido a invertir los extremos del intervalo cuando el primero es mayor que el segundo, e invertir el orden de la lista de números resultantes:

Set Range(1,-3,1);
>> [[1, 0, -1, -2, -3]]

aunque así también presenta un comportamiento extraño:

Set Range(1,-6,2);
>> [[1, -1, -3]]

Creo que debería corregirse y que devuelva el conjunto vacío cuando el primer extremo del intervalo sea mayor que el segundo.

Change History (2)

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

Status: newaccepted

He estado buscando cuando se solicitó hace siglos la función Range y he visto que no se definió qué es lo que debería hacer en ese y en otros casos. Yo propuse una fórmula que es compatible con lo que propone Pedro ahora, aunque más general, pero como siempre se quedó a medias. Si nadie tiene nada en contra es lo que implementaré. Como no había nada dicho sobre lo que habría de haceren estos casos no se puede hablar de compatibilidad hacia atrás así que tenemos libertad para definir lo que queramos.

Real Range(Real a, Real b, Real p)

Devuelve el conjunto de los reales  

  a+k*p con k = 0,1,2,3,...
 
en el intervalo [a,b] si p>0 ó [b,a] si p<0 
 
Si p==0 muestra un error y devuelve el conjunto vacío 
Si p>0 y a>b devuelve el conjunto vacío sin mostrar error alguno. 
Si p<0 y a<b devuelve el conjunto vacío sin mostrar error alguno.

comment:2 Changed 15 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: acceptedclosed

(In [1713]) Fixes #784

Note: See TracTickets for help on using tickets.