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
0
% 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 ));
   }
   0
   1
... 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
    4
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