emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Calc: `*' binds more strongly than `/'


From: Christian Schlauer
Subject: Re: Calc: `*' binds more strongly than `/'
Date: Thu, 26 Apr 2007 23:07:45 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.98 (gnu/linux)

Jay Belanger <address@hidden> writes:

> Christian Schlauer <address@hidden> writes:

[...]

>> I did some more `research', and a*b/c*d is not bad form, and it is a
>> properly written expression, see Wikipedia. Let me cite from
>> <http://en.wikipedia.org/wiki/Order_of_operations#Examples_from_arithmetic>:
>
> As I said, there are rules for interpreting the above expressions.  
> I also said that avoiding the parentheses is bad form; note that the
> wikipedia article also says:
>
>   Proper use of parentheses and other grouping symbols
>
>   When restricted to using a straight text editor, parentheses (or
>   more generally "grouping symbols") must be used generously to make
>   up for the lack of graphics, like square root symbols. Here are some
>   rules for doing so: 
>
>   1) Whenever there is a fraction formed with a slash, put the
>   numerator (the number on top of the fraction) in one set of
>   parentheses, and the denominator (the number on the bottom of the
>   fraction) in another set of parentheses. This is not required for
>   fractions formed with underlines: 
>     y = (x+1)/(x+2)
>   ...
>   5) An exception to the rules requiring parentheses applies when only
>   one character is present. While correct either way, it is more
>   readable if parentheses around a single character are omitted: 
>
>     y = (3)/(x) or y = 3/x
>
>     y = (3)/(2x) or y = 3/(2x)

I saw those examples, too, but didn't read the text of that section,
as all examples there use `+', and then of course one needs
parentheses -- otherwise it is *really* wrong. But the last line I
cite from you is exactly what Calc is ignoring and what I `complain'
about:

y = 3/(2x)

So despite the `juxtaposition operator' (I had to check what this
means, <http://en.wiktionary.org/wiki/juxtaposition> says "An absence
of multiplication symbols, `ab' instead of `a times b'"), they suggest
to write the denominator with parentheses to bind the `x' to `2'.
Let's ignore for a moment the `juxtaposition operator' and use `*': in
the current Calc you can write `y = 3/2*x' when what you want Calc to
do is `y = 3/(2*x)', and *that* is really not what I'd expect from
mathematics software after reading the Wikipedia article -- because
according to what you cite above from Wikipedia, the `x' in `y =
3/2*x' does definitely not belong to the denominator. But in Calc, it
does. :-(

If you want, let Calc interpret `y = 3/2x' as `y = 3/(2x)', in order
to let the `juxtaposition operator' have precedence -- but `y = 3/2*x'
should _never_ be treated in that way.

>> So besides Excel, Gnumeric, MATLAB, all pocket calculators, Wikipedia
>> agrees with me, too.
>
> Well, wikipedia also says
>
>   Calculators
>
>   Different calculators follow different orders of operations.
>
> and gives several examples.

But these examples refer to only two cases:

1) Cheaper calculators without a stack work left to right without any
   priority given to different operators, for example giving

   1+2*3=9

   while more sophisticated calculators will use a more standard
   priority, for example giving

   1+2*3=7.

2) Two different TI models that differ in the interpretation of a^b^c:
   one sees it as (a^b)^c, the other as a^(b^c).

That the TI models differ concerning a^b^c is unfortunate, but on the
basis of this Wikipedia article I still say that

- all pocket calculators _that consider the order of operators_ treat
  / and * as equal and evaluate from left to right in the absence of
  parentheses and

- the behaviour of pocket calculators starts to differ with
  expressions like a^b^c, which some evaluate left-to-right, as they
  do with other operators, while others (the better ones, IMO -- Calc
  included, see (info "(calc)Algebraic Tutorial"): `2^3^4' is
  equivalent to `2^(3^4)') evaluate this from right-to-left.

> For those that really don't like parentheses, an option to allow the
> user to decide for themselves the relative precedence of * and / in
> Calc will be added, of course.

That sounds good, but what will be the default? I really think that
the Wikipedia article has more than enough evidence against Calc's
current behaviour.

Regards,

Christian





reply via email to

[Prev in Thread] Current Thread [Next in Thread]