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

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Sun Feb 10 14:49:05 UTC 2019


Even if http://bugs.squeak.org/view.php?id=6455 example does not fit well
with ScaledDecimal/Fraction, that does not make Float expectations more
valid.
See #testIndexOfBug6455

   ((0 to: Float pi by: Float pi / 100) indexOf: Float pi * (3/100))

I corrected indexOf:startingAt: myself (because fuzziness wasn't correctly
implemented), then Levente provided a better implementation.
But that does not mean that we endorse the feature!

This kind of expectation is void because of nature of Float.
See this, the last element in that example is not even Float pi:

    (0 to: Float pi by: Float pi / 100) last = 3.1101767270538954.

We could instead write something like:

    anglesInDegrees := 0 to: 180 by: 180/100.
    fractionsOfPi := 0 to: 1 by: 1/100.

and have our programs behave well better!

Le dim. 10 févr. 2019 à 15:27, Nicolas Cellier <
nicolas.cellier.aka.nice at gmail.com> a écrit :

> 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.
>
> 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/20190210/e766b8db/attachment.html>


More information about the Squeak-dev mailing list