From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27336 invoked from network); 17 Jun 2008 10:38:44 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.4 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 17 Jun 2008 10:38:44 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 47654 invoked from network); 17 Jun 2008 10:38:40 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 17 Jun 2008 10:38:40 -0000 Received: (qmail 13734 invoked by alias); 17 Jun 2008 10:38:38 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 25175 Received: (qmail 13719 invoked from network); 17 Jun 2008 10:38:37 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 17 Jun 2008 10:38:37 -0000 Received: from mail.o2.co.uk (jabba.london.02.net [82.132.130.169]) by bifrost.dotsrc.org (Postfix) with ESMTP id 548D18028AC3 for ; Tue, 17 Jun 2008 12:38:34 +0200 (CEST) Received: from sc.homeunix.net (78.105.216.138) by mail.o2.co.uk (8.0.013.3) (authenticated as stephane.chazelas) id 4851DD9500C171F6; Tue, 17 Jun 2008 11:38:29 +0100 Received: from chazelas by sc.homeunix.net with local (Exim 4.69) (envelope-from ) id 1K8Ya5-0001qM-18; Tue, 17 Jun 2008 11:38:29 +0100 Date: Tue, 17 Jun 2008 11:38:29 +0100 From: Stephane Chazelas To: Richard Hartmann Cc: Peter Stephenson , Zsh hackers list Subject: Re: arithmetic operator precedence Message-ID: <20080617103829.GD5016@sc.homeunix.net> Mail-Followup-To: Richard Hartmann , Peter Stephenson , Zsh hackers list References: <20080612095723.GF5113@sc.homeunix.net> <20080616080726.GP10734@prunille.vinc17.org> <20080616144211.276fb0e3@pws-pc> <2d460de70806170219k12ff4cadn441b52c48bf8076f@mail.gmail.com> <20080617094509.GC5016@sc.homeunix.net> <2d460de70806170324o5a44609x9383cc2445d67dd6@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <2d460de70806170324o5a44609x9383cc2445d67dd6@mail.gmail.com> User-Agent: Mutt/1.5.16 (2007-09-19) X-Virus-Scanned: ClamAV 0.92.1/7494/Tue Jun 17 06:46:03 2008 on bifrost X-Virus-Status: Clean On Tue, Jun 17, 2008 at 12:24:12PM +0200, Richard Hartmann wrote: > On Tue, Jun 17, 2008 at 11:45, Stephane Chazelas > wrote: > > > > In which way is it more "mathematically" correct? > > > > Is that because -3² is -9? > > > > But ** is not ^, it's a binary operator whose shape reminds that > > of multiply, like a multiply++. And even then, POSIX's ^ in bc > > is handled as -3^2 = 9. > > As far as I know, ^ and ** are fuly equivalent. If that is not the case, then > sorry. Do you have a link/manpage/whatever on this topic? [...] Not sure what you mean. ^ in bc is the power operator and there's no ** there. In shells, ** is the power operator and ^ is the XOR operator. What I meant is that ^ reminds of the /human/ (as opposed to /computer/) representation as it indicates that follows must be raised up as in 3². So, one can understand that it should follow the same rules (that is -3^2 should be the same as -3², even though that's not what POSIX decided for bc). But given that ** has more the shape of the * operator, I'm not sure we can tell the same thing. Anyway, I was just curious about Peter's statement. I'm most probably not as versed in maths as he is, so was curious about the rationale behind his statement about -3**2 = 9 not being mathematically correct. Looking at bc history, it seems to have appeared in Unix V6 (1975), and it was a wrapper written in yacc around dc (a reverse polish calculator: _3 2 ^ is less ambiguous there). I'm not versed enough in yacc or grammars to tell whether the precedence was the same, but you can have a look at: http://minnie.tuhs.org/UnixTree/V6/usr/source/s1/bc.y.html %right '=' %left '+' '-' %left '*' '/' '%' %right '^' %left UMINUS [...] e : e '+' e = bundle( $1, $3, "+" ); | e '-' e = bundle( $1, $3, "-" ); | '-' e %prec UMINUS = bundle( " 0", $2, "-" ); | e '*' e = bundle( $1, $3, "*" ); | e '/' e = bundle( $1, $3, "/" ); | e '%' e = bundle( $1, $3, "%%" ); | e '^' e = bundle( $1, $3, "^" ); [...] -- Stéphane