Breaking News
View Comments: Newest First | Oldest First | Threaded View
<<   <   Page 3 / 3
KarlS01
User Rank
Manager
How computers used to do binary multiply and divide
KarlS01   12/7/2013 11:11:18 AM
NO RATINGS
Hi, Tom:  As you said, multiply is a series of additions -- but not dependent on the magnitude of the multiplier, only the number of 1 bits after making both operands positive by complementing if negative.

It is a shift and add sequence starting with the low order bit of the multiplier if it is a 1 add the multiplicand to the double wide product high order and shift right 1 into low order. if multiplier bit is zero, just shift product right one.

Repeat until higher multiplier bits are zero or shifts equal to multipl;ier width. If the high bits are all 0s, then just shift for the remaining word width.

Division was trial subtraction by subtracting the divisore fron the dividend, if the result was positive shift 1 into the quotient high bit else shift 0.  Remainder is left in the reg that held the high order dividend and the quotient in the low order.

If the signs of the dividend and divisor were different, complement at the end.

This is best I remember, maybe a few details missing. The shifts amounted to *2 and /2 and the add/subtract would wind up in the appropriate power of two positions.

I think the constant used in the compiler is 1/10 so they are multiplying by the reciprical of 10 to effectively divide by 10.

krisi
User Rank
CEO
Re: math links
krisi   12/7/2013 10:01:00 AM
NO RATINGS
Pretty cool math...I wonder whether they teach something like that in vlsi classes...Kris

Brian_D
User Rank
Freelancer
math links
Brian_D   12/6/2013 7:56:58 PM
NO RATINGS
There's some nice material about constant division on the companion website for "Hacker's Delight":

http://www.hackersdelight.org/divcMore.pdf

Also, VHDL has a nifty fixed point math package:

http://www.eda.org/fphdl/

-Brian

sa_penguin
User Rank
Manager
Goldschmidt?
sa_penguin   12/6/2013 7:40:07 PM
NO RATINGS
Sounds a bit like Goldschmidt division: converting the factor 1/10 into X/(2^n). Multiply by X, shift N bits, done. Taking the upper 16 bits of a 32-bit word is equal to a 16-bit shift.

I suspect 1/10 doesn't translate perfectly to binary so, just like 1/3 becomes 0.33... you get a hex factor of 0x1999... in your division.

<<   <   Page 3 / 3
Most Recent Comments
NIRANKUSH456
 
NIRANKUSH456
 
David Ashton
 
Rich Krajewski
 
sranje
 
MeasurementBlues
 
MeasurementBlues
 
Sanjib.A
 
David Ashton
Flash Poll
Radio
LATEST ARCHIVED BROADCAST
Join our online Radio Show on Friday 11th July starting at 2:00pm Eastern, when EETimes editor of all things fun and interesting, Max Maxfield, and embedded systems expert, Jack Ganssle, will debate as to just what is, and is not, and embedded system.
Like Us on Facebook

Datasheets.com Parts Search

185 million searchable parts
(please enter a part number or hit search to begin)
EE Times on Twitter
EE Times Twitter Feed
Top Comments of the Week