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