home *** CD-ROM | disk | FTP | other *** search
- Xref: sparky comp.std.c++:1190 comp.lang.c++:13706
- Newsgroups: comp.std.c++,comp.lang.c++
- Path: sparky!uunet!cis.ohio-state.edu!zaphod.mps.ohio-state.edu!malgudi.oar.net!caen!uvaarpa!murdoch!virginia.edu!gs4t
- From: gs4t@virginia.edu (Gnanasekaran Swaminathan)
- Subject: Re: Exponentiation operator proposal
- Message-ID: <1992Sep15.201801.26417@murdoch.acc.Virginia.EDU>
- Sender: usenet@murdoch.acc.Virginia.EDU
- Reply-To: gs4t@virginia.edu (Gnanasekaran Swaminathan)
- Organization: University of Virginia
- References: <23660@alice.att.com> <1992Sep13.193507.27813@ima.isc.com> <MATT.92Sep14225005@physics2.berkeley.edu>
- Date: Tue, 15 Sep 1992 20:18:01 GMT
- Lines: 50
-
- matt@physics2.berkeley.edu (Matt Austern) writes:
-
- : I believe that an exponentiation operator would be of genuine benefit
- : to C++ scientific programmers, and I believe that we who write
- : scientific code are justified in asking that it be included. I don't
- : think, however, that we are justified in asking for a change to the
- : language that makes life harder for other C++ programmers. Using **
- : to denote exponentiation does exactly that: it changes the meaning of
- : legal C++ code, and it makes a useful programming technique more
- : difficult.
- :
- : It is possible to implement an exponentiation operator so that the
- : extension to the language will have no effect at all for people who
- : don't deliberately use the new feature. This is a better idea.
-
- Did you consider operator () for exponentiation?
- It seems to have correct precedence and doesn't need new tokens to be
- introduced.
-
- // if op () is available for exp
- double e= -10(2); // e = -100.0
- double d=10;
- double *p = &e;
-
- e = d(3) - (*p)(2) + d + 3; // e = -8987.0
-
- // status quo
- class Double {
- double d;
- public:
- Double(double f): d(f) {}
- operator double () { return d; }
- Double operator - () { return -d; }
- Double operator () (int i) { ... }
- Double operator () (double f) { return pow(d,f); }
- // other ops ...
- };
-
- Double a(10); // a = 10.0
- double d=a(5); // d = 10000.0
-
- a = a(3.0)*2.5; // a = 2500.0
-
- Double b(2); // b = 2
- a = -b(4) + 3*b(3) - 2*b(2) + b + 3; // a = 5.0
-
- Similary you can define your own Int as well and use it wherever
- you want int and exp op.
-
- -Sekar
-