[squeak-dev] Interval indexOf:startingAt: is fuzzy

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Sun Feb 10 23:54:18 UTC 2019


Le dim. 10 févr. 2019 à 20:16, Eliot Miranda <eliot.miranda at gmail.com> a
écrit :

>
>
> _,,,^..^,,,_ (phone)
>
> On Feb 10, 2019, at 6:27 AM, Nicolas Cellier <
> nicolas.cellier.aka.nice at gmail.com> wrote:
>
> Hi,
> does anyone really need a fuzzy Interval indexOf:startingAt: ?
> Right now, we have this:
>
>     ((0.1 to: 0.9 by: 0.1) indexOf: 0.3) = 3.
>     ((0.1 to: 0.9 by: 0.1) includes: 0.3) = true.
>
> While this can sound nice, I don't think it is.
> No other collection behaves like that.
>
>     ((0.1 to: 0.9 by: 0.1) asArray includes: 0.3) = false.
>     ((0.1 to: 0.9 by: 0.1) asSet includes: 0.3) = false.
>
>
>
> What if instead we added a range numeric type?  Then we could write
> something like
>
> ((0.1 to: 0.9 by: 0.1) asArray includes: (0.3 plusOrMinus: 0.001)) = true.
>

You can even use a nice binary operator 0.3 +/- 0.001 :)


> NumericRange would be instantiated via plusOrMinus: & from:to:, and
> implement interval arithmetic and interval comparison.  So = would be
>
> = aMagnitude
>     ^aMagnitude between: start and stop
>
> and NumericRange would itself use its midpoint for comparisons against
> magnitudes.  It would presumably not be a magnitude itself though, so that
> two NumericRanges would be equal only if they represented the same range,
> not had the same midpoint.
>

All these solutions make = not transitive...
    a = b && (b = c) ==> (a = c)

So if we want interval arithmetic we'd rather use another set of selectors
for achieving this fuzzyfication...


>
> Even Interval itself does not behave consitently:
>
>     ((0.1 to: 0.9 by: 0.1) lastIndexOf: 0.3) = 0.
>     ((0.1 to: 0.9 by: 0.1) occurrencesOf: 0.3) = 0.
>     ((0.1 to: 0.9 by: 0.1) copyWithout: 0.3) = #(0.1 0.2
> 0.30000000000000004 0.4 0.5 0.6 0.7000000000000001 0.8 0.9).
>
> We have ScaledDecimal and Fraction which are less surprising, so IMO we
> should better use them when we really want to play with equality rather
> than trying to cheat with Float equality.
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20190211/3330758b/attachment.html>


More information about the Squeak-dev mailing list