Harvesting Float Interval - questionable feature

nicolas cellier ncellier at ifrance.com
Mon Apr 30 19:15:05 UTC 2007


Playing with Interval, here is a report and some questions about a 
special feature

INTRODUCTION:
------------

Interval on Float are messy.
#do: loops are not consistent with #size nor #at: because of accumulated 
round off errors.
This is because inside the do loop we write
	aValue := aValue + step
And stop the loop when we reach stop

Things are better if we make things compatible with #at: (index is 0-based)
	aValue := start + (index * step)
And stop after self size iterations to be compatible with #size

All this is at http://bugs.squeak.org/view.php?id=6456
It has the advantage of also solving #reverseDo: 
http://bugs.squeak.org/view.php?id=6438.

Another related stuff is the way we test for inclusion.
Current implementation try to test inclusion with a fuzzy tolerance.

Unfortunately, it is completely broken and have incorrect patch at 
http://bugs.squeak.org/view.php?id=1602 for speeding up indexOf: as 
noted by german morales, and better patch by boris gartner at 
http://bugs.squeak.org/view.php?id=1603 for correcting both includes: 
and indexOf:

The patch is however incomplete because it handles only approximate by 
excess, not by default as shown in http://bugs.squeak.org/view.php?id=6455.

QUESTION:
--------

But why do we test for Float inclusion with fuzzy tolerance in Interval 
and not in other collections? And why a fixed tolerance? (1.0e-10 
relative to step in original, 1.0e-8 in some correction).
I would tend to implement exactly same behaviour as super and eventually 
implement a includes:withTolerance: if needed, in all Collection (though 
  this is as simple as #detect:, it might be accelerated in Interval if 
there is a dedicated selector).

My feeling is that previous implementation of do: and unconsistency with 
at: might have motivated the fuzzy test.
But is there another reason to make Interval behave differently from super?

I tend to be cautious now, because when i tried to correct first and 
last that incorrectly handle empty Interval 
(http://bugs.squeak.org/view.php?id=6454), it did break the image.
Text selection rely on this behaviour and that is more than 10 messages 
to patch.

What is your opinion about the fuzzy inclusion?



More information about the Squeak-dev mailing list