Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Math expression evaluation error?

On 01/10/2015 08:53 AM, Bart Schaefer wrote:
OK, let's leave zsh out of this and try the standard "expr" utility,
which built-in arithmetic was designed to replace:

% expr 3 / 8
% expr 3.0 / 8.0
expr: non-numeric argument

Bart, I shouldn't argue because it's to the point of irritation, and that is never positive, but: My stance is not to think about 'expr' or other programming languages, or what ksh did in '79 or about glorious traditions going back to the mainframe days, or any of that. My stance is just to ask: What is most useful? What would produce the maximum utility along with the least surprise, especially for a new user? In which direction is 'the future'?

I now know to just set the option, and I'm all good, problem averted. So it really is just about philosophy. IMHO we have moved past the abacus and a new user, once s/he learns that zsh does internal arithmetic--that it has an excellent internal calculator--will expect that: 3/8 + 5/8 = 1. I think that 99% of humanity would expect that. I'm a math tutor, and I am positive that every one of my students would expect it. I'm not saying that integer arithmetic should not be available, but should it be the default? How often does anyone want or expect: 1/2 + 1/2 = 0? Maybe someone really needs that, and far be it from me to deprive them of it, but I'm claiming that it doesn't happen very often.

      echo $(( 1/2 + 1/2 ));
      echo $(( .5 + .5 ));

... is, in my mind, a monstrosity. The very act of typing: " 1/2 " is a request for floating point arithmetic in just about exactly the same way that typing a decimal point is. I'm not sure that " 1/2 " means anything at all within the confines of integer/abacus arithmetic, I think it's an imaginary number and should return an error, not zero. IMHO the zsh manual for arithmetic would read something like this:

Zsh has a powerful built in calculator. Type expressions just as you would in any other calculator and get the results you expect with no strange surprises or gotchas. For example:

    $ echo $(( ((.5 + 1/2) * 2) **2

Zsh also does integer arithmetic. Users of the abacus will appreciate this ;-) To enter integer mode:

   $ setopt integer_arithmetic

In this mode, the above expression returns '1'. Have fun with that, however we recommend you not use this mode for teaching arithmetic to children.

Just my personal opinion.

Messages sorted by: Reverse Date, Date, Thread, Author