Message-ID: <3D8EA8B0.F4EA56@yahoo.com> From: CBFalconer Organization: Ched Research X-Mailer: Mozilla 4.75 [en] (Win98; U) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: comp.os.msdos.djgpp Subject: Re: Problem with multiplications References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 27 Date: Mon, 23 Sep 2002 14:51:39 GMT NNTP-Posting-Host: 12.90.173.92 X-Complaints-To: abuse AT worldnet DOT att DOT net X-Trace: bgtnsc05-news.ops.worldnet.att.net 1032792699 12.90.173.92 (Mon, 23 Sep 2002 14:51:39 GMT) NNTP-Posting-Date: Mon, 23 Sep 2002 14:51:39 GMT To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Carlo Bramini wrote: > > I have a problem with DJGPP, but I'm going to think it's common with all > i386 target versions of this compiler. > I have two 32 bit numbers and I want to do: > > c = (a*b) >> 32; > > for getting the upper 32 bit DWORD. > Unfortunately, it doesn't work! ... snip ... You need to ensure your numbers never overflow a 32 bit value. So break the input up into 16 bit components, so that a = (a1 << 16) + a2 and b = (b1 << 16) + b2, and do your arithmetic on the 16 bit components. You will have to devise a way of combining them into a 64 bit value, which will probably be some sort of byte array. Watch out for signs. An easier method is to just use a bignum package. -- Chuck F (cbfalconer AT yahoo DOT com) (cbfalconer AT worldnet DOT att DOT net) Available for consulting/temporary embedded and systems. USE worldnet address!