Re: Re: power operator (again)

From: Date: Fri, 20 Dec 2013 01:22:29 +0000
Subject: Re: Re: power operator (again)
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On Thu, Dec 19, 2013 at 4:27 PM, Tjerk Meesters <[email protected]>wrote:

>
>
>
> On Fri, Dec 20, 2013 at 5:50 AM, Kris Craig <[email protected]> wrote:
>
>> On Thu, Dec 19, 2013 at 4:33 AM, Daniel Lowrey <[email protected]>
>> wrote:
>>
>> > > Thanks for all your effort!  Unfortunately, since there's no option
>> for
>> > > negative numbers to intuitively square to positive outcomes, my vote
>> is
>> > > still No.  I understand and respect your reasoning even though I do
>> not
>> > > agree with it.
>>
>
> Intuition can (by definition) not coexist with mathematical reasoning, so
> it seems that you're talking about experience here.
>
> Experience may come from:
>
> a) prior mathematical education
>
> Assuming a sane teacher, you would have been taught to write (-3) ^ 2 on
> paper if you mean to square negative 3.
>
>
> b) prior use of mathematical expressions in other programming languages
>
> 17 out of 22 programming languages that I have investigated are in favour
> of a higher precedence for the power operation.
>
>
>  >
>> > To me this is not a question of "intuitive" vs. "unintuitive" ...
>> > -3^2
>> = -9
>> > is how the preponderance of credible resources evaluate the expression.
>> As
>> > far as I can tell voting "no" on this basis is equivalent to me claiming
>> > the earth is flat because it better fits my world-view.
>>
>>
>> That's a faulty analogy.  In mathematics, the square of any number,
>> positive or negative, yields a positive result.  Any scientific or
>> graphing
>> calculator will match that behavior.  I did sqr(-3) in the Windows
>> Calculator just now and it outputted 9, not -9.
>>
>
> Likewise, both pow(-3, 2) as well as (-3) ** 2 yield 9.
> I'm not
> arguing that an even power of a negative base should yield a negative
> outcome; I'm arguing that what you deem to be intuitive is based on a
> misconception.
>
>
>>
>> From http://en.wikipedia.org/wiki/Square_(algebra):
>>
>> "One of the important properties of squaring, for numbers as well as in
>> many other mathematical systems, is that (for all numbers x), the square
>> of
>> x is the same as the square of its additive inverse -x. That is, the
>> square
>> function satisfies the identity x2 = (-x)2. This can also be expressed by
>> saying that the squaring function is an even function."
>>
>
> See what they're doing there? They disambiguate the expression to (-x)2,
> which is the same as (-3) ** 2 or (-$x) ** 2.
>
>
>> Now, I understand why some programming languages behave differently from
>> the algebraic standard.  I don't agree with it, but I understand their
>> reasoning.  Claiming that "the squaring function should always be an even
>> function" is the equivalent of saying that the Earth is flat is faulty
>> because it completely ignores the facts that support that argument, just
>> as
>> it would be faulty for me to ignore the facts that support yours.
>>
>
> Not just some, more than 75% of the languages I've investigated do that.
> Curiously, Visual Basic does it this way, whereas Excel doesn't :) I've
> listed them here: https://wiki.php.net/rfc/pow-operator#discussion
>
>
>> I believe that, especially for a KISS language like PHP, our top priority
>> with math operators should be to match arithmetic laws as closely and as
>> intuitively as possible.  The average PHP developer is going to do -3 ** 2
>> and expect a result of 9, not -9, and rightly so I think.
>>
>
> And arithmetic law states that -3 ** 2 should be interpreted as `-(3 **
> 2)`. See also:
> http://en.wikipedia.org/wiki/Order_of_operations#Exceptions_to_the_standard
>
> It's only in programming languages that this behaviour may be different
> due to historical reasons or what not.
>
>
>>
>> You're free to disagree and you certainly have valid reasons for doing so,
>> but please try to keep in mind that there is a valid argument on the other
>> side of this, as well.
>>
>
> Your case seems to promote following a minority of programming languages
> that do this, though.
>
>
>>
>> --Kris
>>
>
>
>
> --
> --
> Tjerk
>

So just to tie it all together (and please correct me if I'm mistaken),
your argument is basically that:

-x is actually -1 * x.  Therefore, -3 ** 2 would actually be -1 * 3 ** 2.
 Due to order of operations, that comes out to -1 * 9 == -9.

But now, let's look at another scenario:

<?php

$x = -3;  // Or $x = -1 * 3, if you wish.

$y = $x ** 2;

?>

What would be the value of $y under this RFC?

--Kris


Thread (29 messages)

« previous php.internals (#70780) next »