Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!uunet!ceco!garry From: garry@ceco.ceco.com (Garry Garrett) Newsgroups: comp.lang.c Subject: Re: Help with casts Summary: speed in loops Message-ID: <409@ceco.ceco.com> Date: 22 Feb 91 01:46:45 GMT References: <1991Feb21.040145.8678@cec1.wustl.edu> Organization: Commonwealth Edison Co., Chicago, IL Lines: 48 In article <1991Feb21.040145.8678@cec1.wustl.edu>, abed@saturn.wustl.edu (Abed M. Hammoud) writes: > I am new to C, and I have been a couple of times encountering > the term lvalue...I looked it up in K&R C book but I still don't > get it... I used to know. (sorry, I forgot) > > I also have another small question, please take a look at > the two loops below and tell me if there is any difference > in speed. > > for (i=0; i < 100; i++) > x += i; > > As compared to... > > for (i=0; i < 100; i++) > x += (float)i; > Again, I don't know the answer to that either, but the reason that I am responding is that I have some other hints for you to speed up you loop. Consider: for (i=99; i; i--) x += i; I also recomend that you decare i as type "register int" or "register float". This will save you alot of time if there is a free register and you compiler can handle register variable. Why is my for loop faster? Your version must load i into a register, load 100 into a register, compare them - putting the value of this comparision into a register, and execute a BEQ (Branch if EQual) instruction. My version will load i into a register (if it isn't already in one), and execute a BZR (Brand on ZeRo) instruction. Almost no optimizing compiler will be able to make this optimization for you. In C, the value 0 is also logical false, and any other value is true. You can make your programs alot faster if you just choose how to use 0 correctly. In this case, counting "backwards" saves you alot of time. If we consider that each of the above instuctions takes a machine cycle (I know, it may not work out that way) then your version takes twice as long as mine, for each itteration. Comming from fortran, this must all seem a bit strange to you (counting backwards, using variables *as* conditions...) but after you get used to it, it comes easy. Good luck. Garry Garrett