On Sat, Nov 20, 2021 at 9:07 AM Ben Bacarisse <ben.use...@bsb.me.uk> wrote:
>
> Chris Angelico <ros...@gmail.com> writes:
>
> > On Sat, Nov 20, 2021 at 5:08 AM ast <ast@invalid> wrote:
>
> >>  >>> 0.3 + 0.3 + 0.3 == 0.9
> >> False
> >
> > That's because 0.3 is not 3/10. It's not because floats are
> > "unreliable" or "inaccurate". It's because the ones you're entering
> > are not what you think they are.
> >
> > When will people understand this?
> >
> > (Probably never. Sigh.)
>
> Most people understand what's going on when it's explained to them.  And
> I think that being initially baffled is not unreasonable.  After all,
> almost everyone comes to computers after learning that 3/10 can be
> written as 0.3.  And Python "plays along" with the fiction to some
> extent.  0.3 prints as 0.3, 3/10 prints as 0.3 and 0.3 == 3/10 is True.

In grade school, we learn that not everything can be written that way,
and 1/3 isn't actually equal to 0.3333333333. Yet somehow people
understand that computers speak binary ("have you learned to count
yet, or are you still on zeroes and ones?" -- insult to a machine
empire, in Stellaris), but don't seem to appreciate that floats are
absolutely accurate and reliable, just in binary.

But lack of knowledge is never a problem. (Or rather, it's a solvable
problem, and I'm always happy to explain things to people.) The
problem is when, following that lack of understanding, people assume
that floats are "unreliable" or "inaccurate", and that you should
never ever compare two floats for equality, because they're never
"really equal". That's what leads to horrible coding practices and
badly-defined "approximately equal" checks that cause far more harm
than a simple misunderstanding ever could on its own.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to