What do you recommend for the high-order bit? I am "off my reservation" here. Thought there might be a clever way to add positive numbers using / so partial results could be fun. Multiplication may be "men dok sai" (too much trouble).
On 12/10/2011 8:03 PM, Henry Rich wrote: > Yes, you can do 2's-complement multiplication. I think you need to be > more precise about what happens in case of overflow: are you just > getting the low n bits of the 2n-bit result, which means that you have a > meaningless sign bit; or is the high-order bit of the product preserved? > > The way you do it in hardware (or microcode, often) is, you implement an > nxn->2n-bit unsigned multiplier, then you correct the product by (for > each operand) subtracting the operand IF the other operand is negative. > The math of this is fun to work through: in 2's-comp a positive number > is 0.xxxx and a negative code 1.xxxx represents the number (1.xxxx - 2). > See what that means for products. > > Cheap machines repeatedly add n-bit numbers together, which leads you to > Booth's algorithm (q. v.). > > Now that gates are free the multiplier is implemented with a network of > full adders, which add 3 bits to produce a 2-bit total. This network is > called a carry-save adder, because the n^2 bits of the partial product > are combined, using full adders, with no explicit carry propagation: you > just keep adding bits of the same place value, reducing the number of > bits by a 3:2 ratio, until you end up with 2n bits, which you then > polish off with a carry-propagating adder (the art of design is in > deciding which bits of equal value should be added). The overall > operation is surprisingly fast, much faster than adding 64 n-bit numbers > one by one. Research continues on the best way to build the carry-save > adder, and the building blocks to use for it. > > You could emulate any or all of that, but I'm not sure it's interesting > to do so. > > Henry Rich > > On 12/10/2011 7:48 PM, Kip Murray wrote: >> Cool. I think it is an improvement because it neatly avoids a case >> statement. Now I wonder if we could implement two's-complement addition >> and multiplication with overflow, basing these on bitwise operations >> >> 0 + 0 is 0, 0 + 1 is 1 + 0 is 1, and 1 + 1 is 1 0 >> >> 0 * 0 is 0 * 1 is 1 * 0 is 0, and 1*1 is 1 >> >> That is, I do not want hc and hcinv to be used except to produce data >> and check answers, and I want n-bit two's-complement answers for n-bit >> two's-complement data so some of them will be wrong because of overflow. >> >> Here for Linda is Henry's hcinv expressed without conjunctions other >> than " . >> >> hcinv =: ([: -/ [: #. (,: [: +: 1 {. ]))"1 >> >> On 12/10/2011 10:00 AM, Henry Rich wrote: >>> Same idea, better implementation >>> >>> hcinv =. -/@:#.@:(,: +:@(1&{.))"1 >>> >>> Henry Rich >>> >>> On 12/10/2011 10:48 AM, Henry Rich wrote: >>>> Maybe not an improvement, but this is how I would have done back in my >>>> hardware-design days: >>>> >>>> hcinv =. -~/@:#.@:(~:/\)@:((,1)&,:)"1 >>>> >>>> Quite a bit more elegant in wires than in J! >>>> >>>> Henry Rich >>>> >>>> On 12/10/2011 1:01 AM, Kip Murray wrote: >>>>> Now we need an inverse for Raul's improved #: ("hash colon") >>>>> >>>>> hc NB. Raul's improved #: >>>>> {.@#:@(,: (2 * |)) >>>>> >>>>> hc i: 2 >>>>> 1 1 0 >>>>> 1 1 1 >>>>> 0 0 0 >>>>> 0 0 1 >>>>> 0 1 0 >>>>> >>>>> hcinv NB. improvement sought >>>>> 2&#.`(2&#.@}. - 2 ^<:@#)@.{."1 >>>>> >>>>> hcinv hc i: 2 >>>>> _2 _1 0 1 2 >>>>> >>>>> On 12/8/2011 2:41 PM, Raul Miller wrote: >>>>> ... >>>>> But this would work just as well, as a model: >>>>> >>>>> {.@#:@(,: 2 * |)i:2 >>>>> 1 1 0 >>>>> 1 1 1 >>>>> 0 0 0 >>>>> 0 0 1 >>>>> 0 1 0 >>>>> ---------------------------------------------------------------------- >>>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>>> >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm