Linda, responding to your earlier post, let us work with small decimal numbers and 16 binary digits. Define
binary =: (16#2) #: ] NB. binary from decimal decimal =: #. NB. decimal from binary NB. Actually monadic #. computes +/ y * |. 2 ^ i. # y <-- the point NB. From that you can deduce #. y + z is (#. y) + #. z NB. and #. c * y is c * #. y for scalar c . I hear you saying, for example _6 -: decimal (binary 13) - binary 19 1 Looking behind the scenes we see (binary 13 19), (binary 13) - binary 19 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 _1 1 1 _1 0 Yes, decimal 0 0 0 0 0 0 0 0 0 0 0 _1 1 1 _1 0 _6 Also - binary 6 0 0 0 0 0 0 0 0 0 0 0 0 0 _1 _1 0 decimal - binary 6 _6 Finally (notice the 2) (binary 13) + binary 19 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 decimal (binary 13) + binary 19 32 Reading the examples above you should remember #. y + c * z is (#. y) + #. c * z is (#. y) + c * #. z -- this includes the case scalar c is _1 . On 12/16/2011 2:40 AM, Linda Alvord wrote: ... > Did you really read my post in a reply to a message to Devon? I'll repeat it > here as I am interested in your comments: > > ]a=:8+i.15 > 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 > ]b=:15#15 > 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 > ]c=:a-b > _7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7 > f=: 13 :'(x#2)#:y' > f > ] #:~ 2 #~ [ > > The function f converts the lists to binary numbers. The largest number 22 > is less than 32 so only 5 digits are require. > > ]aa=:5 f a > 0 1 0 0 0 > 0 1 0 0 1 > 0 1 0 1 0 > 0 1 0 1 1 > 0 1 1 0 0 > 0 1 1 0 1 > 0 1 1 1 0 > 0 1 1 1 1 > 1 0 0 0 0 > 1 0 0 0 1 > 1 0 0 1 0 > 1 0 0 1 1 > 1 0 1 0 0 > 1 0 1 0 1 > 1 0 1 1 0 > > ]bb=:5 f b > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > 0 1 1 1 1 > > The result below is the difference in J between the two arrays above. It > is not a conversion using #: > > ]cc=:aa-bb > 0 0 _1 _1 _1 > 0 0 _1 _1 0 > 0 0 _1 0 _1 > 0 0 _1 0 0 > 0 0 0 _1 _1 > 0 0 0 _1 0 > 0 0 0 0 _1 > 0 0 0 0 0 > 1 _1 _1 _1 _1 > 1 _1 _1 _1 0 > 1 _1 _1 0 _1 > 1 _1 _1 0 0 > 1 _1 0 _1 _1 > 1 _1 0 _1 0 > 1 _1 0 0 _1 > > For comparison, the result cc2 is obtained as a J result using #: > ]cc2=: 5 f c > 1 1 0 0 1 > 1 1 0 1 0 > 1 1 0 1 1 > 1 1 1 0 0 > 1 1 1 0 1 > 1 1 1 1 0 > 1 1 1 1 1 > 0 0 0 0 0 > 0 0 0 0 1 > 0 0 0 1 0 > 0 0 0 1 1 > 0 0 1 0 0 > 0 0 1 0 1 > 0 0 1 1 0 > 0 0 1 1 1 > > Or: > > ]cc3=:#:c > 0 0 1 > 0 1 0 > 0 1 1 > 1 0 0 > 1 0 1 > 1 1 0 > 1 1 1 > 0 0 0 > 0 0 1 > 0 1 0 > 0 1 1 > 1 0 0 > 1 0 1 > 1 1 0 > 1 1 1 > > Both cc2 and cc3 seem implausible because all numbers are known positive > numbers. Now look at cc : > > w=: 13 :'(x,y)$|.2^i.y' > w > , $ [: |. 2 ^ [: i. ] > 15 w 5 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > 16 8 4 2 1 > > cc*15 w 5 > 0 0 _4 _2 _1 > 0 0 _4 _2 0 > 0 0 _4 0 _1 > 0 0 _4 0 0 > 0 0 0 _2 _1 > 0 0 0 _2 0 > 0 0 0 0 _1 > 0 0 0 0 0 > 16 _8 _4 _2 _1 > 16 _8 _4 _2 0 > 16 _8 _4 0 _1 > 16 _8 _4 0 0 > 16 _8 0 _2 _1 > 16 _8 0 _2 0 > 16 _8 0 0 _1 > > > +/"1 cc*15 w 5 > _7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7 > > This is c! > > Not only that, J knows it is c. > > #.cc > _7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7 > > So what do you think? > > Linda > > -----Original Message----- > From: programming-boun...@jsoftware.com > [mailto:programming-boun...@jsoftware.com] On Behalf Of Kip Murray > Sent: Friday, December 16, 2011 2:43 AM > To: Programming forum > Subject: Re: [Jprogramming] How #: should have been designed > > The verb tc (two's complement) appears to work > > tc =: #:~ 2 #~ [:>./ 1 + [:>. (2 ^. |)`(2 ^.>:)@.(0<: ])"0 > > twoscomplement i: 6 > 0 1 0 > 0 1 1 > 1 0 0 > 1 0 1 > 1 1 0 > 1 1 1 > 0 0 0 > 0 0 1 > 0 1 0 > 0 1 1 > 1 0 0 > 1 0 1 > 1 1 0 > > tc i: 6 > 1 0 1 0 > 1 0 1 1 > 1 1 0 0 > 1 1 0 1 > 1 1 1 0 > 1 1 1 1 > 0 0 0 0 > 0 0 0 1 > 0 0 1 0 > 0 0 1 1 > 0 1 0 0 > 0 1 0 1 > 0 1 1 0 > > > On 12/15/2011 12:52 PM, Kip Murray wrote: >> twoscomplement i: 4 NB. error >> 1 0 0 >> 1 0 1 >> 1 1 0 >> 1 1 1 >> 0 0 0 >> 0 0 1 >> 0 1 0 >> 0 1 1 >> 1 0 0 >> >> rp =: [: }: [: i: 2 ^<: NB. representable in y bits >> >> rp 3 >> _4 _3 _2 _1 0 1 2 3 >> >> twoscomplement rp 3 NB. OK >> 1 0 0 >> 1 0 1 >> 1 1 0 >> 1 1 1 >> 0 0 0 >> 0 0 1 >> 0 1 0 >> 0 1 1 >> >> >> On 12/14/2011 9:13 AM, Raul Miller wrote: >>> The subject line of this thread is arguably wrong -- there are a >>> variety of "good ways" of decomposing integers to binary. >>> >>> That said, it's interesting to think about the various proposals >>> expressed in terms similar to those which could be used to implement >>> monadic #: >>> >>> antibase2=: #:~ 2 #~ 1 + 2<.@^. 1>.>./@,@:|@:<. >>> twoscomplement=: #:~ 2 #~ 1 + 2<.@^. 1 +>./@,@:|@:<. >>> signwithbits=: #:~ 0, 2 #~ 1 + 2<.@^. 1>.>./@,@:|@:<. >>> >>> (In all cases the #: here is dyadic, so these definitions are >>> independent of the definition of monadic #:) >>> >>> antibase2 i: 3 >>> 0 1 >>> 1 0 >>> 1 1 >>> 0 0 >>> 0 1 >>> 1 0 >>> 1 1 >>> twoscomplement i: 3 >>> 1 0 1 >>> 1 1 0 >>> 1 1 1 >>> 0 0 0 >>> 0 0 1 >>> 0 1 0 >>> 0 1 1 >>> signwithbits i: 3 >>> _1 0 1 >>> _1 1 0 >>> _1 1 1 >>> 0 0 0 >>> 0 0 1 >>> 0 1 0 >>> 0 1 1 >>> >>> There's also (* * #:) but that one assumes the antibase2 >>> implementation... >>> > ---------------------------------------------------------------------- > 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