In my example I explained only a part of formula. Maybe it's not clear. I repeat the example: D = A * B / C If: A = 214751 B = 10000 C = 30000 then D must be 71583 !! In your formula when perform "A * (B % C)" you overflow!! because (B % C) = 30000 and 214751 * 30000 = 0x1800134d0 that exceed long size. Is it right ? HAve you other idea ? Regards Giuliano "Jacob Christ" < Per: m> Cc: Oggetto: Re: Rif: RE: [motoroladsp] Mathematical function 11/11/02 19.32 long x long / long It's simple to show that D = A * B / C can overflow no matter how you calculate it if the conditions are right. --- A = 0x7FFF FFFF B = 0x7FFF FFFF C = 0x1 will never fit in a signed long D, does D have to be a signed long? Jacob --- In motoroladsp@y..., giuliano.to@q... wrote: > > It's simple to show that > > A * (B % C) can overflow! > > For example if : > A = 214751 > B = 10000 > C = 30000 > > 214751 * 30000 = 0x1800134d0 > > Is it right ? > > Regards, > Giuliano > "Harrold Spier" > <harrold.spier@al Per: <giuliano.to@q...>, > tium.nl> <motoroladsp@y...> > Cc: > 07/11/02 16.39 Oggetto: RE: [motoroladsp] Mathematical function long x > long / long > > > Try: > > D = A * (B / C) + /* Main part */ > (A * (B % C)) / C; /* Correction with remainder */ > > Harrold > -----Original Message----- > From: giuliano.to@q... [mailto:giuliano.to@q...] > Sent: Thursday, November 07, 2002 15:41 > To: motoroladsp@y... > Subject: [motoroladsp] Mathematical function long x long / long > Does anyone have implemented a mathematical function to perform D = A * > B / C where A,B,C,D are "signed long" ? Obviusly A * B resualt can > exceed long size value. Thanks, Giuliano > _____________________________________ > Note: If you do a simple "reply" with your email client, only the author > of this message will receive your answer. You need to do a "reply all" > if you want your answer to be distributed to the entire group. > > _____________________________________ > About this discussion group: > > To Join: motoroladsp-subscribe@y... > > To Post: motoroladsp@y... > > To Leave: motoroladsp-unsubscribe@y... > > Archives: http://www.yahoogroups.com/group/motoroladsp > > More Groups: http://www.dsprelated.com/groups.php3 > ">http://docs.yahoo.com/info/terms/ _____________________________________ Note: If you do a simple "reply" with your email client, only the author of this message will receive your answer. You need to do a "reply all" if you want your answer to be distributed to the entire group. _____________________________________ About this discussion group: To Join: To Post: To Leave: Archives: http://www.yahoogroups.com/group/motoroladsp More Groups: http://www.dsprelated.com/groups.php3 ">http://docs.yahoo.com/info/terms/ |
|
Rif: Re: Rif: RE: Mathematical function long x long / long
Started by ●November 12, 2002
Reply by ●November 12, 20022002-11-12
10000 % 30000 = 10000 not 30000 10000 / 30000 = 0 The MOD operator gives you the remainder of the integer (long) division. 10000 * 214751 = 2147510000 = 0x800066F0 Which has overflowed as well If the speed hit doesn't bother you try... D = (long)((float)A * (float)B / (float)C); I'm not sure yet how or even if the saturation and rounding bits affect floats on the DSP compilers. But this works in Borland C++. Jacob --- In motoroladsp@y..., giuliano.to@q... wrote: > > In my example I explained only a part of formula. Maybe it's not clear. I > repeat the example: > > D = A * B / C > > If: > A = 214751 > B = 10000 > C = 30000 > then > D must be 71583 !! > > In your formula when perform "A * (B % C)" you overflow!! because (B % C) > = 30000 and > 214751 * 30000 = 0x1800134d0 that exceed long size. > Is it right ? > HAve you other idea ? > Regards > Giuliano > > "Jacob Christ" > <jacob@p... Per: motoroladsp@y... > m> Cc: > Oggetto: Re: Rif: RE: [motoroladsp] Mathematical function > 11/11/02 19.32 long x long / long > > > > It's simple to show that > > D = A * B / C > > can overflow no matter how you calculate it if the conditions are > right. > --- > A = 0x7FFF FFFF > B = 0x7FFF FFFF > C = 0x1 > > will never fit in a signed long D, does D have to be a signed long? > > Jacob > > --- In motoroladsp@y..., giuliano.to@q... wrote: > > > > It's simple to show that > > > > A * (B % C) can overflow! > > > > For example if : > > A = 214751 > > B = 10000 > > C = 30000 > > > > 214751 * 30000 = 0x1800134d0 > > > > Is it right ? > > > > Regards, > > Giuliano > > > > > > > > > > > > > "Harrold > Spier" > > > <harrold.spier@al Per: > <giuliano.to@q...>, > > tium.nl> > <motoroladsp@y...> > > > Cc: > > 07/11/02 16.39 Oggetto: RE: > [motoroladsp] Mathematical function long x > > long / > long > > > > > > > > > > > > > Try: > > > > D = A * (B / C) + /* Main part */ > > (A * (B % C)) / C; /* Correction with > remainder */ > > > > Harrold > > > > > > -----Original Message----- > > From: giuliano.to@q... [mailto:giuliano.to@q...] > > Sent: Thursday, November 07, 2002 15:41 > > To: motoroladsp@y... > > Subject: [motoroladsp] Mathematical function long x long / long > > > > > > Does anyone have implemented a mathematical function to perform D = > A * > > B / C where A,B,C,D are "signed long" ? Obviusly A * B resualt can > > exceed long size value. Thanks, Giuliano > > > > > > > > > > > > _____________________________________ > > Note: If you do a simple "reply" with your email client, only the > author > > of this message will receive your answer. You need to do a "reply > all" > > if you want your answer to be distributed to the entire group. > > > > _____________________________________ > > About this discussion group: > > > > To Join: motoroladsp-subscribe@y... > > > > To Post: motoroladsp@y... > > > > To Leave: motoroladsp-unsubscribe@y... > > > > Archives: http://www.yahoogroups.com/group/motoroladsp > > > > More Groups: http://www.dsprelated.com/groups.php3 > > > > > > ">http://docs.yahoo.com/info/terms/ > > _____________________________________ > Note: If you do a simple "reply" with your email client, only the author of > this message will receive your answer. You need to do a "reply all" if you > want your answer to be distributed to the entire group. > > _____________________________________ > About this discussion group: > > To Join: motoroladsp-subscribe@y... > > To Post: motoroladsp@y... > > To Leave: motoroladsp-unsubscribe@y... > > Archives: http://www.yahoogroups.com/group/motoroladsp > > More Groups: http://www.dsprelated.com/groups.php3 > ">http://docs.yahoo.com/info/terms/ |