On Sep 18, 2018, at 2:52 AM, Guillaume Larcheveque <guillaume.larcheveque@gmail.com> wrote:

Maybe #to:by: should convert its parameters in Fraction to avoid Floats problems (not sure, just an idea)

There is no need to convert.  One can simply write

    0 to: 1 by: 1/10

The issue with 0 to: 1 by: 0.1 is a problem with floating point arithmetic, not with intervals, and one does not cure disease by putting band aids on symptoms.  Instead we should teach the pitfalls of floating point arithmetic representations so that people are not astonished by 1/10.0*10.  Avoid simplifying language. Teach literacy.


2018-09-18 11:25 GMT+02:00 Esteban Lorenzano <estebanlm@gmail.com>:


On 18 Sep 2018, at 11:13, Guillermo Polito <guillermopolito@gmail.com> wrote:



On Tue, Sep 18, 2018 at 11:06 AM Julien <julien.delplanque@inria.fr> wrote:
Hello,

I realised that it is possible to create an interval of floats.

I think this is bad because, since intervals are computed by successively adding a number, it might result in precision errors.

(0.0 to: 1.0 by: 0.1) asArray >>> #(0.0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6000000000000001 0.7000000000000001 0.8 0.9 1.0)

The correct (precise) way to do it would be to use ScaledDecimal:

(0.0s1 to: 1.0s1 by: 0.1s1) asArray >>> #(0.0s1 0.1s1 0.2s1 0.3s1 0.4s1 0.5s1 0.6s1 0.7s1 0.8s1 0.9s1 1.0s1)


And I���d like to discuss this with you.

What do you think?

Well, I think it's a matter of balance :)

#to:by: is defined in Number. So we could, for example, cancel it in Float.
However, people would still be able to do

1 to: 1.0 by: 0.1

Which would still show problems.

Nevertheless, I have seen this a lot of times. 

0.0 to: 1.0 by: 0.1

Is a common use case.


And moreover, we could try to do

1 to: 7 by: (Margin fromNumber: 1)

And even worse

1 to: Object new by: (Margin fromNumber: 1)

I think adding type-validations all over the place is not a good solution, and is kind of opposite to our philosophy...

So we should
 - document the good usages
 - document the bad ones
 - and live with the fact that we have a relaxed type system that will fail at runtime :)

yup. 
But not cancel.

Esteban


Guille




--
Guillaume Larcheveque