Hey guys,

I'm proposing that we reconsider removing the warning from floating point
division and here's why.

While IEEE 754 defines special values for floating point arithmetic when
division by zero occurs, there's nothing stopping the language from
providing useful error information to the user, which may help them debug
potentially buggy code. It's true that it's not exceptional since there is
now well defined behavior in the case of changing division by zero to IEEE
754 standard in PHP. However, PHP didn't actually distinguish between
integer division and floating point division prior to intdiv. So in the
case of division by zero the warning was useful to help someone catch their
mistake.

Now, the onus is on the person writing the code to decipher whether or not
they created a potential division by zero scenario by deducing how they
arrived at INF at some point in their code. This is creating an unnecessary
burden when we've always provided the user with the useful error
information in the past. I'm not sure why we should remove it now, but
based on this conversation I can see that the confusion resonates around
this urge to convert the warning to an exception and the conflict of it not
being exceptional (in the case of floating point math) since there is now
well defined behavior.

So my conclusion is that...

Yes, it's not exceptional. No, we shouldn't throw an exception for division
by zero in floating point arithmetic. No, we shouldn't remove the warning
since it still provides useful information to the person debugging the
code. Debugging the code without this warning can be a monstrosity since
you won't necessarily know at which point in a compounded operation the
division by zero occurred. For example, PHP_INT_MAX ** PHP_INT_MAX creates
an overflow resulting in INF. Though 0 / INF results in 0. So an operation
like (1 / ($x / PHP_INT_MAX ** PHP_INT_MAX) where $x happened to be 0 in
one particular case, makes both hunting down and reproducing the bug quite
difficult without some direction. The warning has historically provided
this direction in the past and I believe that removing it now will only
further the confusion.

I don't think people actually care about whether or not we keep the
warning. I think what they would care about more is the consistency of the
return value and defined behavior, which I believe we have already
addressed very well.

On Thu, Jul 2, 2015 at 4:44 AM, Jakub Kubíček <kelerest...@gmail.com> wrote:

> +1 for everything proposed here :-)
>
>
> Kubo2
>
>
> 2015-07-02 9:59 GMT+02:00 Dmitry Stogov <dmi...@zend.com>:
> > On Thu, Jul 2, 2015 at 3:26 AM, Bob Weinand <bobw...@hotmail.com> wrote:
> >
> >> > Am 29.06.2015 um 19:14 schrieb Andrea Faulds <a...@ajf.me>:
> >> >
> >> > Hi again,
> >> >
> >> >> On 29 Jun 2015, at 18:02, Bob Weinand <bobw...@hotmail.com> wrote:
> >> >>
> >> >> Yes, it generally makes sense...
> >> >> Then I have other questions:
> >> >>
> >> >> - Why do we then still have a Warning? Either we have well-defined
> >> behavior, or we throw an exception. Well-defined behavior *plus* a
> warning
> >> is IMO non-sense.
> >> >
> >> > That’s weird, yeah. We don’t throw warnings for the math functions
> when
> >> you give them odd inputs, e.g. sin(INF) is just NAN, no warning.
> >> >
> >> > I think removing it would make sense.
> >> >
> >> >> - Is it intentional for intdiv and % to throw an Exception instead of
> >> Error or some more specific DivisionByZeroError or similar? (yes, I
> know,
> >> Error is only very recent, but the question still needs to be asked).
> >> >
> >> > Hmm. Using Error might make some sense given it used to raise
> E_WARNING.
> >> I think DivisionByZeroError sounds like a good idea.
> >>
> >> Hey,
> >>
> >> I just committed that to master…
> >>
> >> But I noticed that intdiv(PHP_INT_MIN, -1) isn't very well suited for a
> >> DivisionByZeroError.
> >>
> >> What do you think about adding an ArithmeticError for that case (and
> >> making DivisionByZeroError subclass of it)?
> >> That ArithmeticError could then be reused for negative bitshifts, which
> >> would solve the question what to do with that too.
> >>
> >
> > I think we should introduce ArithmeticError, as you propose.
> >
> > Thanks. Dmitry.
> >
> >
> >>
> >> Thanks,
> >> Bob
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to